C#多線程應用:子線程更新主窗體控件的值(一)

我記得之前寫過一次關於多線程的調用及更新的文章,因爲時間比較久了,如今一時沒找到。在作項目的時候,用到了多線程,仍是有不少的同事在問多線程更新主窗體的事情,如今就這個事情作個記錄。web

提及多線程之間的更新或調用,無非都是代理之類的,可能不少人有不一樣的見解。多線程

今天也不想和你們討論底層的實現,就目前的問題而說,告訴你們兩個經常使用的方式進行線程間的調用:函數

1)定義一個委託代理實現回調函數;spa

2)在子線程中使用Invoke返回主線程;.net

剛剛我已經說了,今天主要說代理的使用,若是你對這方面的知識點相對薄弱的話,最好先查查代理的使用。線程

對於上面的這兩種方式的不一樣一個是主線程實現,另外一個在子線程中實現,詳細的不一樣的使用你能夠去百度看看;代理

今天主要告訴你們第一種方式,在主線程中實現具體功能,因爲此類代碼網上處處都是,因此我也直接從網上copy一份,如下是代碼的實現:code

 

程序了開 了4個子線程.各自獨立.子線程根據輸入信號判斷while循環,符合條件退出while循環,該子線程就算運行結束了,但是主線程怎麼知道他執行完了呢?
難道用一個時間觸發器,多少時間檢測一下各個進程的運行狀況?

問題補充:

難道用一個時間觸發器,多少時間檢測一下各個線程的運行狀況? 
 
滿意回答
定義一個委託實現回調函數
public delegate void CallBackDelegate(string message);

程序開始的時候
//把回調的方法給委託變量
CallBackDelegate cbd = CallBack;
//啓動線程
Thread th = new Thread(Fun);
th.Start(cbd);//開始線程,代入參數

//線程執行的方法 參數是個委託, 線程中參數須要用object類型.
public void Fun(object o)
{
        //這裏是你的操做代碼,循環,根據條件退出while
	while(true)
        {
        }
        //把傳來的參數轉換爲委託
	CallBackDelegate cbd = o as CallBackDelegate;
        //執行回調.
	cbd("這個線程傳回的信息");
}

//回調方法
private void CallBack(string message)
{
        //主線程報告信息,能夠根據這個信息作判斷操做,執行不一樣邏輯.
	MessageBox.Show(message);
}
出處: http://blog.csdn.net/suncherrydream/article/details/8571890
相關文章
相關標籤/搜索