C#中的Timer和DispatcherTimer應用實例。本站提示廣大學習愛好者:(C#中的Timer和DispatcherTimer應用實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中的Timer和DispatcherTimer應用實例正文
Timer組件是基於辦事器的計時器,經由過程設置時光距離Interval,周期性的觸發Elapsed事宜。
用法以下:
class Program {
static System.Timers.Timer Timer1 = new System.Timers.Timer();
static void Main() {
Timer1.Interval = 1000;
Timer1.Elapsed += new ElapsedEventHandler(PeriodicTaskHandler);
Timer1.Start();
Console.ReadLine();
}
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上。
用法以下:
private void Button_Click(object sender, RoutedEventArgs e) {
Timer timer = new Timer();
timer.Interval = 1000;
timer.Start();
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
}
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。
用法
private void Button_Click(object sender, RoutedEventArgs e) {
timer.Interval = TimeSpan.FromMilliseconds(1000);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
void timer_Tick(object sender, EventArgs e) {
i++;
Test.Content = i.ToString();
}
private int i = 0;
private DispatcherTimer timer = new DispatcherTimer();