class AAA
{
public static void Main()
{
Thread t = new Thread(new ThreadStart(A));
t.Start();
Console.Read();
}
private static void A()
{
Console.WriteLine("Method A!");
}
}
若是帶一個參數,Thread類的構造方法中提供了此項功能。如下,
class AAA
{
public static void Main()
{
Thread t = new Thread(new ParameterizedThreadStart(B));
t.Start("B");
Console.Read();
}
private static void B(object obj)
{
Console.WriteLine("Method {0}!",obj.ToString ());
}
}
但是若要帶多個參數,就需要進行多一步的處理,處理方法很多,稍微舉幾例,
示例一:
借用對象的屬性傳值,將對象作爲參數
class AAA
{
public static void Main()
{
My m = new My();
m.x = 2;
m.y = 3;
Thread t = new Thread(new ThreadStart(m.C));
t.Start();
Console.Read();
}
class My
{
public int x, y;
public void C()
{
Console.WriteLine("x={0},y={1}", this.x, this.y);
}
}
示例二:
借用結構體
struct RowCol
{
public int row;
public int col;
};
//定義方法
public void Output(Object rc)
{
RowCol rowCol = (RowCol)rc;
for (int i = 0; i < rowCol.row; i++)
{
for (int j = 0; j < rowCol.col; j++)
Console.Write("{0} ", _char);
Console.Write("\n");
}
}
示例三,使用委託,
static void Main(string[] args)
{
string name = "sfsfsf";
string id = "12323";
Thread th = new Thread(new ThreadStart(delegate()
{
run(name, id);
}));
th.Start();
Console.Read();
th.Abort();
}
public static void run(string name, string id)
{
Console.WriteLine(name + "," + id);
}
最後一種方法,使用匿名參數,
class Program
{
static void Main(string[] args)
{
string hello = "hello world";
//如果寫成Thread thread = new Thread(ThreadMainWithParameters(hello));這種形式,編譯時就會報錯
Thread thread = new Thread(() => ThreadMainWithParameters(hello));
thread.Start();
Console.Read();
}
static void ThreadMainWithParameters(string str)
{
Console.WriteLine("Running in a thread,received: {0}", str);
}
}
匿名方法的使用使代碼看上去簡單明瞭,但我們一定要注意匿名方法會引發的一些不易察覺的問題,
其中就包括匿名方法引起的變量共享問題,有關此問題的詳細介紹請參見
文章:http://www.2cto.com/kf/201112/113646.html。