1、通過實體類來傳遞(能夠傳遞多個引數與獲取返回值),demo例如以下:
namespace threadparameterdemo}}通過實體來來封裝:
namespace threadparameterdemo呼叫:public void testfunction()}}
private void form1_load(object sender, eventargs e)小注:必須注意isbackground的問題。假設isbackground為false的,則windows程式在退出的時候,不會為你自己主動退出該執行緒。也就是實際上你的應用程式未結束。
msdn推薦:多執行緒方法呼叫提供引數的最好辦法是將目標方法包裹在類中,並為該類定義字段,這些欄位將被用作新執行緒的引數。
這樣的方法的長處是,不論什麼時候想要啟動新執行緒。都能夠建立類的新例項,該例項帶有自身的引數。
backgroundworker 類
threadstart中的函式是沒有返回值和引數的
2、非同步呼叫中的引數和返回值
能完美解決引數和返回值的是使用非同步呼叫的方式。非同步呼叫和thread相比,乙個最大的劣勢是不能控制其優先順序。
詳細**例如以下:
public delegate string delegatefunction(string name,int age);//託付簡化:delegatefunction df;
private void form1_load(object sender, eventargs e)
public funcdf;//託付小注:private void form1_load(object sender, eventargs e)
通過這樣的方式生成新執行緒是執行在後台的(background),優先順序為normal
3、使用 backgroundworker
多執行緒返回值最簡單方法是:使用 backgroundworker 元件來管理執行緒,在任務完畢時引發事件,然後用事件處理程式處理結果。
backgroundworker backgroundworker1 = new backgroundworker();為了開始在後台操作,必須呼叫backgroundworker的runworkerasync()方法。當呼叫此方時,backgroundworker 通過觸發dowork 事件,開始執行後台操作。dowork 事件的**是在還有乙個執行緒裡執行的。
當後台操作完畢以後,不管是completed 還是cancelled,則runworkercompleted 事件被觸發。通過此方法能夠將後台操作的完畢結果反饋給使用者。
另外,通過runworkercompletedeventargs例項的cancelled 屬性,以推斷是否是cancel操作使得後台操作終止。
詳細demo例如以下:
using system;demo**來自msdn:using system.windows.forms;
private void form2_load(object sender, eventargs e)
private void button1_click(object sender, eventargs e)
private system.componentmodel.backgroundworker backgroundworker1
= new system.componentmodel.backgroundworker();
private void testarea2()
private void initializebackgroundworker()
private void backgroundworker1_dowork(
object sender,
system.componentmodel.doworkeventargs e)
private void backgroundworker1_runworkercompleted(
object sender,
system.componentmodel.runworkercompletedeventargs e)}}
點選開啟鏈結
參考文章:
點選開啟鏈結
4、假設不如返回值的時候。應該怎麼優雅的寫呢?匿名函式啊
functionclass類新增,測試函式例如以下:
public static void testfunction2(string name, int age)呼叫例如以下:
private void form1_load(object sender, eventargs e)小注:));t1.start();
}
假設通過wcf來呼叫的話,應該把起執行緒的函式放到服務端,假設放到client。非常easy由於wcfclient的時間限制,造成造成主程式的莫名崩潰。
崩潰的原因主要是clientwcf響應時間是有限制。
C 多執行緒引數傳遞
在多執行緒或單執行緒任務中,讓執行緒帶傳入引數一直是個麻煩的問題,通常有種方法就是以類,對像的變數來傳引數,這種方法理解上很簡單不過在某些場合使用很麻煩,這裡就不介紹了,我們主要介紹一種.net2.0中新增加的帶引數執行執行緒的方法,示例程式如下 parameterizedthreadstart p...
C 多執行緒引數傳遞
c 多執行緒引數傳遞 在多執行緒或單執行緒任務中,讓執行緒帶傳入引數一直是個麻煩的問題,通常有種方法就是以類,對像的變數來傳引數,這種方法理解上很簡單不過在某些場合使用很麻煩,這裡就不介紹了,我們主要介紹一種.net2.0中新增加的帶引數執行執行緒的方法,示例程式如下 parameterizedth...
C 多執行緒引數傳遞
c 多執行緒引數傳遞 在多執行緒或單執行緒任務中,讓執行緒帶傳入引數一直是個麻煩的問題,通常有種方法就是以類,對像的變數來傳引數,這種方法理解上很簡單不過在某些場合使用很麻煩,這裡就不介紹了,我們主要介紹一種.net2.0中新增加的帶引數執行執行緒的方法,示例程式如下 parameterizedth...