C 多執行緒引數傳遞

2021-08-02 22:31:53 字數 2996 閱讀 9361

在多執行緒或單執行緒任務中,讓執行緒帶傳入引數一直是個麻煩的問題,通常有種方法就是以類,對像的變數來傳引數,這種方法理解上很簡單不過在某些場合使用很麻煩,這裡就不介紹了,我們主要介紹一種.net2.0中新增加的帶引數執行執行緒的方法,示例程式如下:

parameterizedthreadstart parstart = new parameterizedthreadstart(threadmethod);

thread mythread = new thread(parstart);

object o = 「hello」;

mythread.start(o);

threadmethod如下:

public void threadmethod(object parobject)

如果是多引數的話可以以陣列或動態列表等方式裝相入 object,然後使用時拆箱即可

這樣是不是簡單多了哈,,,

———————————————————————————–

***個人認為,還是為執行緒建立乙個單獨的類,在類的初始化函式裡頭為類裡頭的變數賦值,來達到傳入引數比較簡單。下面有些方法是有問題的,不過我已經達到了目的就懶得去排錯了,哪位朋友看出問題了提醒一下啊。呵呵…

方法一:

在vs2003中,也不能直接訪問,參看

一般來說,直接在子執行緒中對窗體上的控制項操作是會出現異常,這是由於子執行緒和執行窗體的執行緒是不同的空間,因此想要在子執行緒來操作窗體上的控制項,是不可能 簡單的通過控制項物件名來操作,但不是說不能進行操作,微軟提供了invoke的方法,其作用就是讓子執行緒告訴窗體執行緒來完成相應的控制項操作。

現在用乙個用執行緒控制的程序條來說明,大致的步驟如下:

1.建立invoke函式,大致如下:

////// delegate function be invoked by main thread

///private void invokefun()

2.子執行緒入口函式:

////// thread function inte***ce

///private void threadfun()

}3.建立子執行緒:

thread thdprocess = new thread(new threadstart(threadfun));

thdprocess.start();

備註:using system.threading;

private system.windows.forms.progressbar prgbar;

方法二:

加入該句:control.checkforillegalcrossthreadcalls = false 取消線執行緒安全保護模式!

方法三:帶引數

使用類、類的方法或類的屬性都可以向執行緒傳遞引數:

public class url**********

public void download()

}[... 在另乙個類中使用它們...]

url********** ********** = new url********** (yoururl);

new thread (new threadstart (**********.download)).start();

注意引數是如何傳遞的。

方法四:帶引數

threadstart starter = delegate ;

new thread(starter).start();

//使用執行緒�

waitcallback callback = delegate (object state) ;

threadpool.queueuserworkitem (callback, yoururl);

方法五:帶引數

thread t = new thread (new parameterizedthreadstart(downloadurl));

t.start (myurl);

static void downloadurl(object url)

—————————————————————————-

—————————————————————————-

c#執行緒呼叫帶引數的方法

之前做了乙個小的應用程式,用的是c#語言,在做的過程中遇到了乙個困難,就是不如呼叫帶引數的執行緒,經過查詢網上的資料,找到了簡單的解決方案。

在以前的學習中,我們經常碰到的是沒有帶引數的執行緒,所以當遇到必須用到引數的執行緒時就會手足無措,現在我們用的這種解決問題的方法,實際上的原理是:將執行緒執行的方法和引數都封裝到乙個類裡面。通過例項化該類,方法就可以呼叫屬性來實現間接的型別安全地傳遞引數。看如下**:

using system;

using system.threading;

//threadwithstate 類裡包含了將要執行的任務以及執行任務的方法

public class threadwithstate

//要丟給執行緒執行的方法,本處無返回型別就是為了能讓threadstart來呼叫

public void threadproc()

}---------------分隔線---------------

//用來呼叫上面方法的類,是本例執行的入口

public class example .」, 42);

// 建立執行任務的執行緒,並執行

thread t = new thread(new threadstart(tws.threadproc));

t.start();

console.writeline(「main thread does some work, then waits.」);

t.join();

console.writeline(

「independent task has completed; main thread ends.」);}}

從上面的例子就能很清楚的得到我們想要的結果,注意這句**的用法:

thread t = new thread(new threadstart(tws.threadproc));

C 多執行緒引數傳遞

在多執行緒或單執行緒任務中,讓執行緒帶傳入引數一直是個麻煩的問題,通常有種方法就是以類,對像的變數來傳引數,這種方法理解上很簡單不過在某些場合使用很麻煩,這裡就不介紹了,我們主要介紹一種.net2.0中新增加的帶引數執行執行緒的方法,示例程式如下 parameterizedthreadstart p...

C 多執行緒引數傳遞

c 多執行緒引數傳遞 在多執行緒或單執行緒任務中,讓執行緒帶傳入引數一直是個麻煩的問題,通常有種方法就是以類,對像的變數來傳引數,這種方法理解上很簡單不過在某些場合使用很麻煩,這裡就不介紹了,我們主要介紹一種.net2.0中新增加的帶引數執行執行緒的方法,示例程式如下 parameterizedth...

C 多執行緒引數傳遞

c 多執行緒引數傳遞 在多執行緒或單執行緒任務中,讓執行緒帶傳入引數一直是個麻煩的問題,通常有種方法就是以類,對像的變數來傳引數,這種方法理解上很簡單不過在某些場合使用很麻煩,這裡就不介紹了,我們主要介紹一種.net2.0中新增加的帶引數執行執行緒的方法,示例程式如下 parameterizedth...