我想不带参数的大家应该都会,如下
示例三,使用委托,
最后一种方法,使用匿名参数,
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。