C#中Timer的简单范例(System.Windows.Forms.Timer)

发布时间:2019-07-26编辑:脚本学堂
本文介绍下,C#中Timer的简单例子,主要是使用System.Windows.Forms.Timer,有需要的朋友,可以参考下。

有时希望在指定某時間後, 系統再來呼叫我們指定的函式。
例如: 顯示某一個字串後, 過 5 秒後,自動清除以保持版面清潔的設計. 這時候, 就可以使用方便簡單的 System.Windows.Forms.Timer 這個元件.

System.Windoes.Forms.Timer 類別的設計原理是當時間到了, 送一個時間到了的事件到 UI Message Queue 中.

單一 thread 設計 -- 避免了存取共同變數的問題
所以基本上, 是只有一個 thread 執行的設計. 這樣的設計導致了程式設計模型上的簡化。
因為直接使用 UI Message Queue 來傳達"時間到了"這樣的訊息,使得單一 thread 下, 還能顧及其他事件的處理。

最好的例子就是: 同時顯示程式的狀態在視窗上, 又能讓使用者自由的操作視窗.
這樣的設計, 可以讓使用者以為同時有多個程式正在進行工作.
而事實上呢, 只有一條 thread 執行工作

這樣簡單且幽雅的設計, 可以讓程式設計師, 不必考慮多重執行緒下, 令人頭痛的同步問題.
這表示你可以自由的存取任何 Form 上視覺元件上的成員資料,

而在使用者端, 幾乎可以立即看到改變的結果.
 
最簡單範例: 指定一個字串, 然後在指定的秒數後, 自動清除. 在這期間, 使用者完全可以操作視窗.
使用方法:
 

// 顯示 "目前正在進行版本檢查 .. 字串, 在 4 秒後自動清除
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  = "               ";
        }
}