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