调用Web服务时避免使用沙漏鼠标光标?

时间:2010-06-09 11:29:39

标签: wpf web-services mouse cursor hourglass

我不知道这是一般的网络服务问题还是仅仅是我的特定情况,这是一个带有调用Web服务方法的DispatcherTimer的WPF应用程序。 无论何时调用计时器,鼠标​​光标都会自动变为沙漏光标。

调用的处理时间非常短,每隔3秒就会发生一次,因此用户体验是每3秒钟将鼠标作为一个沙漏进行瞬间分割,然后返回正常的光标表示。

如何避免这种不便?

感谢。

1 个答案:

答案 0 :(得分:3)

每当计时器触发时,你的整个应用程序是否都没有响应,或整个过程是否过快而无法通知?

我的假设是您可能在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();
    }
}

(还有其他一些方法可以实现相同的目标,这个方法很简单。请参阅此处的指导以获取更多信息:http://msdn.microsoft.com/en-us/magazine/cc163328.aspx

相关问题