C# ThreadStart中如何帶參數


1.ThreadStart

線程執行帶參數的方法,new Thread(new ThreadStart(delegate { ThreadTask(firstPage, lastPage); }));

2.System.Threading.ParameterizedThreadStart
其實沒有必要,ThreadStart本來就是個委托,里面又來了個匿名方法。多了一次方法的調用,雖然性能不會影響什么,但看着很別扭。c#有一個委托System.Threading.ParameterizedThreadStart,就是來做這事的,從名字上也可又看出來是帶參數的.

下面是原型:

// 表示在 System.Threading.Thread 上執行的方法。
// 參數: obj: 包含該線程過程的數據的對象。
[ComVisible(false)]
public delegate void ParameterizedThreadStart(object obj);

下面是代碼實例:

static void Test(object arg)

{

int n = (int)arg;//如果是數組等,可又做相應轉換

long r = 0;

for (int i = 0; i < n; i++)

{

r += i;

}

Console.WriteLine(r);

}

static void Main(string[] args)

{

int n = 1000 * 10000;

Thread t = new Thread(new ParameterizedThreadStart(Test));

t.Start(n);//多參數可又組成數組傳遞進去。
}

 

它在實例化時可以用帶有一個Object參數的方法作為構造函數的參數.為什么是Object這樣的參數呢?很簡單,因為在.net中Object是所有類型的基類,用它可以表示Array(數組)、Interface(接口)、ValueType(值類型,如bool,byte,char,short,int,float,long,double等)、class(類)等.net中的類型。當然,這也意味着如果你要啟動一個線程,給它傳遞一個int類型參數時,必須在   啟動方法中進行相應的類型轉換。


免責聲明!

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



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