C#中Timer的简单范例(System.Windows.Forms.Timer)
本文导语: 有时希望在指定某時間後, 系統再來呼叫我們指定的函式。 例如: 顯示某一個字串後, 過 5 秒後,自動清除以保持版面清潔的設計. 這時候, 就可以使用方便簡單的 System.Windows.Forms.Timer 這個元件. System.Windoes.Forms.Timer 類別的設計原...
有时希望在指定某時間後, 系統再來呼叫我們指定的函式。
例如: 顯示某一個字串後, 過 5 秒後,自動清除以保持版面清潔的設計. 這時候, 就可以使用方便簡單的 System.Windows.Forms.Timer 這個元件.
System.Windoes.Forms.Timer 類別的設計原理是當時間到了, 送一個時間到了的事件到 UI Message Queue 中.
單一 thread 設計 -- 避免了存取共同變數的問題
所以基本上, 是只有一個 thread 執行的設計. 這樣的設計導致了程式設計模型上的簡化。
因為直接使用 UI Message Queue 來傳達"時間到了"這樣的訊息,使得單一 thread 下, 還能顧及其他事件的處理。
最好的例子就是: 同時顯示程式的狀態在視窗上, 又能讓使用者自由的操作視窗.
這樣的設計, 可以讓使用者以為同時有多個程式正在進行工作.
而事實上呢, 只有一條 thread 執行工作
這樣簡單且幽雅的設計, 可以讓程式設計師, 不必考慮多重執行緒下, 令人頭痛的同步問題.
這表示你可以自由的存取任何 Form 上視覺元件上的成員資料,
而在使用者端, 幾乎可以立即看到改變的結果.
最簡單範例: 指定一個字串, 然後在指定的秒數後, 自動清除. 在這期間, 使用者完全可以操作視窗.
使用方法:
MessageManager.ShowInformation(this.label3, "目前正在進行版本檢查 ...", 4000);
代码如下:
class MessageManager {
class MessageTimer : System.Windows.Forms.Timer
{
public System.Windows.Forms.Label InfoLabel;
string strMessage;
public MessageTimer(System.Windows.Forms.Label InfoLabel, string strMessage, int mil_sec)
{
this.InfoLabel = InfoLabel;
this.strMessage = strMessage;
Interval = mil_sec;
}
}
// 顯示訊息公用程式 (指定顯示秒數)
public static void ShowInformation(System.Windows.Forms.Label InfoLabel, string strMessage,int mil_sec)
{
InfoLabel.Text = strMessage; // 立即顯示
MessageTimer myMessageTimer = new MessageTimer(InfoLabel, strMessage, mil_sec);
myMessageTimer.Tick += new EventHandler(ShowMessage_TimerEventProcessor);
myMessageTimer.Start(); // 自動清除計時開始
}
// 清除顯示訊息專用函式
private static void ShowMessage_TimerEventProcessor(Object sender, EventArgs e)
{
MessageTimer MessageTimer = (MessageTimer)sender;
MessageTimer.Stop(); // 停止計時
MessageTimer.InfoLabel.Text = " ";
}
}