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


我記得以前寫過一次關於多線程的調用及更新的文章,由於時間比較久了,現在一時沒找到。在做項目的時候,用到了多線程,還是有很多的同事在問多線程更新主窗體的事情,現在就這個事情做個記錄。

說起多線程之間的更新或調用,無非都是代理之類的,可能很多人有不同的看法。

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

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

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

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

對於上面的這兩種方式的不同一個是主線程實現,另一個在子線程中實現,詳細的不同的使用你可以去百度看看;

今天主要告訴大家第一種方式,在主線程中實現具體功能,由於此類代碼網上到處都是,所以我也直接從網上copy一份,以下是代碼的實現:

 

程序了開 了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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM