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(" "); } }
示例三,使用委托,
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。