C#中 ThreadStart和ParameterizedThreadStart區別


最主要區別:

1.Thread 是啟動一個線程,但是沒有參數。

2.ParameterThreadStart  線程可以接受一個輸入參數

ThreadStart:

ThreadStart這個委托定義為void ThreadStart(),也就是說,所執行的方法不能有參數。

ThreadStart threadStart=new ThreadStart(ProcessData);
Thread thread=new Thread(threadStart);
thread.Start();
public void SayHelloToXiaohouye()
   {
string strName="My name is Xiaohouye"; 
 Console.Write("Hello "+strName); }

     上面很簡單的例子,我們用定義了一個ThreadStart類型的委托,這個委托制定了線程需要執行的方法: SayHelloToXiaohouye,在這個方法里聲明一個變量,並輸出.這就構成了最簡單的多線程的例子,一般情況下,我們都是用這個的。

 

 

ParameterThreadStart:

ParameterThreadStart的定義為void ParameterizedThreadStart(object state),使用這個這個委托定義的線程的啟動函數可以接受一個輸入參數,具體例子如下 :

 

ParameterizedThreadStart threadStart=new ParameterizedThreadStart(SayHelloToXiaohouye)
Thread thread=new Thread() ;
thread.Start("Xiaohouye");
//注意參數一定要用object 類型,否則報錯 public void SayHelloToXiaohouye(object name) {
//使用時候需要轉換 Console.Write("Hello my name is {0}",name.ToString()); }

看了一個參數的例子,下面我們來看下多個參數的例子

,我們通過把多個參數組合到一個類中,然后把這個類的實例作為參數傳遞,就可以實現多個參數傳遞,廢話不多說,看代碼:

 

 

public class AddParameter
{
    public string a=string.Empty;
public string b=string.Empty; public AddParameter(string name1, string name2) { a = name1; b = name2; } } #endregion class Program { static void Main(string[] args) { Console.WriteLine("***** Adding with Thread objects *****"); Console.WriteLine("當前線程為:{0}", Thread.CurrentThread.ManagedThreadId); AddParameter p = new AddParameter("xiaohouye", "xiaowangzi"); Thread t = new Thread(new ParameterizedThreadStart(Add)); t.Start(p); Console.ReadLine(); } #region Add method
//組合參數 static void Add(object data) { if (data is AddParams) { Console.WriteLine("當前線程為:{0}",Thread.CurrentThread.ManagedThreadId); AddParameter ap = (AddParameter )data; Console.WriteLine("{0} + {1} is {2}", ap.a, ap.b, ap.a + ap.b); } } #endregion } }


免責聲明!

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



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