2
我不知道這是一個普通的Web服務問題還是我的具體情況,這是一個調用Web服務方法的DispatcherTimer的WPF應用程序。 每當定時器被調用時,鼠標光標自動變爲沙漏光標。調用Web服務時避免沙漏鼠標光標?
該調用的處理過程非常短且每3秒發生一次,因此用戶體驗是每3秒鐘將鼠標填充爲沙漏作爲分秒,然後返回到正常光標表示。
我該如何避免這種不便?
謝謝。
我不知道這是一個普通的Web服務問題還是我的具體情況,這是一個調用Web服務方法的DispatcherTimer的WPF應用程序。 每當定時器被調用時,鼠標光標自動變爲沙漏光標。調用Web服務時避免沙漏鼠標光標?
該調用的處理過程非常短且每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)
非常棒!像魅力一樣工作 - 謝謝! (對不起,我不能爲你的答案投票,但它擊中了現場:) – AVIDeveloper 2010-06-10 10:43:19
順便說一句,你是對的 - 我DID同步呼叫網絡服務,我也認爲這是沙漏閃爍的來源。 再次感謝! – AVIDeveloper 2010-06-10 10:45:45
很高興我能幫到你。 =) – 2010-06-10 11:15:36