在 .NET Framework 2.0 版中,要實現線程調用帶參數的方法有兩種辦法。
第一種:使用ParameterizedThreadStart。
調用 System.Threading.Thread.Start(System.Object) 重載方法時將包含數據的對象傳遞給線程。
使用 ParameterizedThreadStart 委托不是傳遞數據的類型安全的方法,因為 System.Threading.Thread.Start(System.Object) 方法重載接受任何對象。
這種方法不推薦使用,故在此不做詳細介紹,具體用法參見:http://msdn2.microsoft.com/zh-cn/library/system.threading.parameterizedthreadstart(VS.80).aspx
ParameterizedThreadStart ParStart = new ParameterizedThreadStart(ThreadMethod);
Thread myThread = new Thread(ParStart);
object o = "hello";
myThread.Start(o);
//ThreadMethod如下:
public void ThreadMethod(object ParObject)
{
//程序代碼
}
第二種:將線程執行的方法和參數都封裝到一個類裡面。通過實例化該類,方法就可以調用屬性來實現間接的類型安全地傳遞參數。
具體代碼如下(本示例來自MSDN)
using System;
using System.Threading;
//ThreadWithState 類裡包含了將要執行的任務以及執行任務的方法
public class ThreadWithState {
//要用到的屬性,也就是我們要傳遞的參數
private string boilerplate;
private int value;
//包含參數的構造函數
public ThreadWithState(string text, int number)
{
boilerplate = text;
value = number;
}
//要丟給線程執行的方法,本處無返回類型就是為了能讓ThreadStart來調用
public void ThreadProc()
{
//這裡就是要執行的任務,本處只顯示一下傳入的參數
Console.WriteLine(boilerplate, value);
}
}
//用來調用上面方法的類,是本例執行的入口
public class Example {
public static void Main()
{
//實例化ThreadWithState類,為線程提供參數