2010-06-09 63 views
2

我不知道这是一个普通的Web服务问题还是我的具体情况,这是一个调用Web服务方法的DispatcherTimer的WPF应用程序。 每当定时器被调用时,鼠标光标自动变为沙漏光标。调用Web服务时避免沙漏鼠标光标?

该调用的处理过程非常短且每3秒发生一次,因此用户体验是每3秒钟将鼠标填充为沙漏作为分秒,然后返回到正常光标表示。

我该如何避免这种不便?

谢谢。

回答

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

+0

非常棒!像魅力一样工作 - 谢谢! (对不起,我不能为你的答案投票,但它击中了现场:) – AVIDeveloper 2010-06-10 10:43:19

+0

顺便说一句,你是对的 - 我DID同步呼叫网络服务,我也认为这是沙漏闪烁的来源。 再次感谢! – AVIDeveloper 2010-06-10 10:45:45

+0

很高兴我能帮到你。 =) – 2010-06-10 11:15:36