在 .net framework 2.0 版中,要實現執行緒呼叫帶引數的方法有兩種辦法。
第一種:使用parameterizedthreadstart。
呼叫 system.threading.thread.start(system.object) 過載方法時將包含資料的物件傳遞給執行緒。
使用 parameterizedthreadstart 委託不是傳遞資料的型別安全的方法,因為 system.threading.thread.start(system.object) 方法過載接受任何物件。
這種方法不推薦使用,故在此不做詳細介紹,具體用法參見:
parameterizedthreadstart parstart
=new
parameterizedthreadstart(threadmethod);
thread mythread
=new
thread(parstart);
objecto =
"hello";
mythread.start(o);
//threadmethod如下:
public
void
threadmethod(
object
parobject)
複製**
第二種:將執行緒執行的方法和引數都封裝到乙個類裡面。通過例項化該類,方法就可以呼叫屬性來實現間接的型別安全地傳遞引數。
具體**如下(本示例來自msdn)
using
system;
using
system.threading;
//threadwithstate 類裡包含了將要執行的任務以及執行任務的方法
public
class
threadwithstate
//要丟給執行緒執行的方法,本處無返回型別就是為了能讓threadstart來呼叫
public
void
threadproc() }//
用來呼叫上面方法的類,是本例執行的入口
public
class
example .",
42);
//建立執行任務的執行緒,並執行
thread t
=new
thread(
newthreadstart(tws.threadproc));
t.start();
console.writeline(
"main thread does some work, then waits.");
t.join();
console.writeline(
"independent task has completed; main thread ends.
"); }}
複製**
方法一:
在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 執行緒呼叫帶引數的方法 2 2007年06月15日 星期五 下午 11 24 個人認為,還是為執行緒建立乙個單獨的類,在類的初始化函式裡頭為類裡頭的變數賦值,來達到傳入引數比較簡單。下面有些方法是有問題的,不過我已經達到了目的就懶得去排錯了,哪位朋友看出問題了提醒一下啊。呵呵.方法一 在vs20...
c 多執行緒 呼叫帶引數函式
執行緒操作主要用到thread類,他是定義在system.threading.dll下。使用時需要新增這乙個引用。該類提供給我們四個過載的建構函式 以下引自msdn thread threadstart 初始化 thread 類的新例項。由 net compact framework 支援。thre...
c 多執行緒 呼叫帶引數函式
執行緒操作主要用到thread類,他是定義在system.threading.dll下。使用時需要新增這乙個引用。該類提供給我們四個過載的建構函式 以下引自msdn thread threadstart 初始化 thread 類的新例項。由 net compact framework 支援。thre...