2016年11月22日 星期二

[C#] 傳遞參數給Thread

要傳遞參數給Thread ,可以透過ParameterizedThreadStart 幫助我們完成願望。

但它有一個比較麻煩的限制,就是只能傳一個Object。


首先我們先建一個要在Thread中執行的方法,並且傳入一個object


private void ThreadFunction(object data)
{             
    int n=Convert.ToInt32(data);
    System.Threading.Thread.Sleep(100);            
    Console.WriteLine("I Get parmeter : "+n);
}

接著用ParameterizedThreadStart啟動它,並且傳入參數,當然你也可以用struct同時傳入多個參數。


ParameterizedThreadStart pts;
Thread mThread;
             
for (int i=0;i<10;i++)
{
    pts=new ParameterizedThreadStart(ThreadFunction);
    mThread=new Thread(pts);
    mThread.Start(i);
} 


以下是一個範例,Thread將收到的參數印出來

using System;
using System.Threading;
namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            new Program();
        }
        
        public Program()
        {
            ParameterizedThreadStart pts;
            Thread mThread;
             
            for (int i=0;i<10;i++)
            {
                pts=new ParameterizedThreadStart(ThreadFunction);
                mThread=new Thread(pts);
                mThread.Start(i);
            } 
         
        }
        
        private void ThreadFunction(object data)
        {             
            int n=Convert.ToInt32(data);
            System.Threading.Thread.Sleep(100);            
            Console.WriteLine("I Get parmeter : "+n);
          
        }
    }
}

執行結果


I Get parmeter : 7
I Get parmeter : 2
I Get parmeter : 3
I Get parmeter : 5
I Get parmeter : 0
I Get parmeter : 4
I Get parmeter : 9
I Get parmeter : 6
I Get parmeter : 1
I Get parmeter : 8

沒有留言:

張貼留言