Timer組件是基于服務器的計時器,通過設置時間間隔Interval,周期性的觸發Elapsed事件。
用法如下:
static void PeriodicTaskHandler(object sender, ElapsedEventArgs e) {
string str =Thread.CurrentThread.ManagedThreadId.ToString()+"##" +"Timer1" +"##" + e.SignalTime.ToLongTimeString();
Console.WriteLine(str);
}
}
DispatcherTimer:Dispatcher隊列中的計時器,不能保證正好在設置的時間間隔發生時執行計時器,但能保證不會在時間間隔發生之前執行計時器。這是因為 DispatcherTimer的操作也是放置在Dispatcher隊列中的,何時執行DispatcherTimer操作取決于隊列中其他作業及其優先級。
在WPF應用程序中
Timer的Elapsed事件綁定的方法沒有運行在UI線程上,如果要訪問UI線程上的對象,需要利用Invoke或BeginInvoke 將操作發布到UI線程的Dispatcher上。
用法如下:
}
void timer_Elapsed(object sender, ElapsedEventArgs e) {
i++;
this.Dispatcher.Invoke(new Action(() => {
test.Content = i.ToString();
}));
}
private int i = 0;
DispatcherTimer與Dispatcher都運行于相同的線程,并且可以在DispatcherTimer上設置DispatcherPriority。
用法
void timer_Tick(object sender, EventArgs e) {
i++;
Test.Content = i.ToString();
}
private int i = 0;
private DispatcherTimer timer = new DispatcherTimer();
新聞熱點
疑難解答