我不知道这是一个普通的Web服务问题还是我的特定场景,这是一个WPF应用程序,它带有一个调用Web服务方法的DispatcherTimer。每当调用计时器时,鼠标光标都会自动变为沙漏光标。调用的处理时间非常短,每3秒发生一次,因此用户体验是,每3秒鼠标就像沙漏一样闪烁一秒,然后返回到正常的光标表示。如何避免这种不便?
slhcrj9b1#
当计时器触发时,您的整个应用程序是否也没有响应,或者整个过程是否太快而无法注意到?我的假设是,您可能在DispatcherTimer上同步调用代码,这可能会导致短暂的无响应时间(可能是沙漏时间)。要解决这个问题,请确保Dispatcher的Tick事件是异步代码。下面是一个简单的小例子,每3秒钟执行一秒钟的假工作,然后更新GUI:
public partial class MainWindow : Window { private static int foo = 0; public MainWindow() { InitializeComponent(); DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromMilliseconds(3000); timer.Tick += new EventHandler(delegate(object o, EventArgs args) { StatusBox.Text = "Incrementing"; ThreadStart start = delegate() { // Simulate work Thread.Sleep(1000); // Update gui this.Dispatcher.BeginInvoke(new Action(delegate { CountingBox.Text = (foo++).ToString(); StatusBox.Text = "Waiting"; })); }; new Thread(start).Start(); }); timer.Start(); } }
(还有其他方法可以实现同样的目标,这一个简单易懂。更多信息请参见此处的指导:(第10页)
1条答案
按热度按时间slhcrj9b1#
当计时器触发时,您的整个应用程序是否也没有响应,或者整个过程是否太快而无法注意到?
我的假设是,您可能在DispatcherTimer上同步调用代码,这可能会导致短暂的无响应时间(可能是沙漏时间)。要解决这个问题,请确保Dispatcher的Tick事件是异步代码。
下面是一个简单的小例子,每3秒钟执行一秒钟的假工作,然后更新GUI:
(还有其他方法可以实现同样的目标,这一个简单易懂。更多信息请参见此处的指导:(第10页)