跨執行緒對控件做控制,使用System.Threading

接續上一篇的主軸,在進步一點。

接續著上一篇使用BackgroundWorker的使用,這次來分享另一個執行緒的寫法:System.Threading,因為是連結上一篇的主題,所以範例中還是以跨執行緒的程式設計方法為主,這也是很重要的程式設計技巧,大家都知道一個程式就是一個行程,古早時代一個行程規定只能有一個執行緒,但時至今日,科技進步,我們可以在一個行程中執行好幾個執行緒,然而多個執行緒就會產生資料分享等需求產生,又可能引發死結Deadlock等問題,不過這些問題在此就不討論了,馬上開始寫程式吧!

 

1.開啟專案後,加入

	using System.Threading;

 

2.宣告執行緒相關變數,並載入參數與工作函數名稱

	public Form1()
{
    InitializeComponent();
    THS = new ThreadStart(Date);
    TH = new Thread(THS);
}

在此也可以加入:

	TH.IsBackground = true;

使得這個執行緒以【背景執行緒】的模式執行

 

3.寫下你需要的工作,如下:

 

	internal void Date()
{
    Thread.BeginCriticalRegion();
    for (; ; )
    {
        try
        {
            this.Invoke(new DNCallBack(DN), new object[] { DateTime.Now.ToString() });
        }
        catch (Exception)
        {
            break;
        }
    }
    Thread.EndCriticalRegion();
}

internal delegate void DNCallBack(string Time);

internal void DN(string Time)
{
    label1.Text = Time.ToString();
}

 

4.最後須要注意的就是啟動、暫停、恢復以及結束四個執行緒動作:

啟動【Start】、暫停【Suspend】、恢復【Resume】、結束【Abort】

在此提醒一點,使用Abort會產生ThreadAbortException的例外狀況,要記得使用Try、Catch攔截例外狀況,另外也可以在FormClosing事件也加上結束執行緒的程式,避免關掉視窗前沒有結束執行緒。

若是使用背景執行執行緒模式,則可以不用幫Abort使用Try、Catch,因為背景執行執行緒並不會防止執行緒終止,所以執行緒終止時,會順利的結束,而前景執行執行緒模式就剛好相反,除此一點外,前景、背景其實都相同。

 

PeterDotNetCS10082501.zip