System.Windows.Forms.Timer:
Windows Forms 程式用
計時執行緒跟 UI 執行緒是同一個 (或者說根本只有一個執行緒)
可能造成主畫面沒有反應的狀況 (因為相同執行緒的關係)
System.Timers.Timer:
所有 .NET 程式皆可使用
計時執行緒跟 UI 執行緒是不同個 (因此有執行緒同步問題)
不會造成主畫面沒有反應的情況
於是拜 Google 大神,得到了 System.Windows.Threading.DispatcherTimer 這個物件,可以用在 WPF 程式上,而且它所產生的執行緒跟擁有 UI 的執行緒是同一個,就不必擔心無法修改的問題。
private void btnTimer_Click(object sender, RoutedEventArgs e) {
// 設定 Timer 以自動讀取
DispatcherTimer t = new DispatcherTimer();
t.Tick += new EventHandler(t_Elapsed);
t.Interval = new TimeSpan(1000000);
t.Start();
}
private void t_Elapsed(object sender, EventArgs e) {
// ... do something...
}
值得注意的是 TimeSpan 建構元接受的數字是 100 奈秒單位,上面的 1000000 為 100 毫秒的意思。
System.Windows.Threading.DispatcherTimer:
所有 .NET 程式皆可使用
計時執行緒位於 Dispatcher 佇列之中,可以存取 UI 控制項
不會造成主畫面沒有反應的情況 (未測試,可能是因為統一由 Dispatcher 管理)
沒有留言:
張貼留言