天天看點

C#中建立線程,建立帶參數的線程

線程操作主要用到Thread類,他是定義在System.Threading.dll下。使用時需要添加這一個引用。該類提供給我們四個重載的構造函

構造函數定義:

無參數委托

[SecuritySafeCritical]
public Thread(ThreadStart start);
[SecuritySafeCritical]
public Thread(ThreadStart start, int maxStackSize);      

有一個參數object委托

[SecuritySafeCritical]
public Thread(ParameterizedThreadStart start);
[SecuritySafeCritical]
public Thread(ParameterizedThreadStart start, int maxStackSize);
// maxStackSize:
// 線程要使用的最大堆棧大小(以位元組為機關);如果為 0 則使用可執行檔案的檔案頭中指定的預設最大堆棧大小。重要地,對于部分受信任的代碼,如果 maxStackSize
// 大于預設堆棧大小,則将其忽略。不引發異常。      

一、建立沒有參數傳入線程

//建立沒有參數的線程
Thread thread = new Thread(new ThreadStart(ThreadMethod));
//或者
//Thread thread = new Thread(ThreadMethod);
thread.Start();
Console.WriteLine("代碼執行完成");      
//線程方法定義
public static void ThreadMethod()
{
    Console.WriteLine("目前線程ID:{0},目前線程名稱:{1}",
        Thread.CurrentThread.ManagedThreadId,
        Thread.CurrentThread.Name);
    while (true)
    {
        Console.WriteLine(DateTime.Now);
        Thread.Sleep(1000);
    }
}      

二、建立一個參數傳入object類型的線程

public static void Init()
{
    //建立一個參數的線程
    //ParameterizedThreadStart 指定傳入的類型是object
    for (int i = 0; i < 3; i++)
    {
        Thread thread = new Thread(new ParameterizedThreadStart(ThreadMethod));
        object obj = i * 10;
        thread.Start(obj);
    }
}
//定義線程方法
public static void ThreadMethod(object number)
{
    int i = (int)number;
    while (true)
    {
        i++;
        Console.WriteLine("目前線程ID:{0},number={1}", Thread.CurrentThread.ManagedThreadId, i);
        Thread.Sleep(2000);
    }
}      
C#中建立線程,建立帶參數的線程

三、建立使用對象執行個體方法,建立多個參數傳入情況的線程

public static void Init()
{
    //建立多個傳入參數的線程
    for (int i = 1; i < 4; i++)
    {
        Calculator cal = new Calculator(i, i * 100);
        Thread thread = new Thread(new ThreadStart(cal.Add));
        thread.Start();
    }
}      
public class Calculator
{
    public int X { get; set; }
    public int Y { get; set; }
    public Calculator(int x, int y)
    {
        this.X = x;
        this.Y = y;
    }
    //定義線程執行方法
    public void Add()
    {
        int i = 0;
        while (i < 2)
        {
            i++;
            Console.WriteLine("目前線程ID:{0},{1}+{2}={3}", Thread.CurrentThread.ManagedThreadId, X, Y, X + Y);
            Thread.Sleep(1000);
        }
    }
}      
C#中建立線程,建立帶參數的線程