编译器自动推断出ParameterizedThreadStart委托,因为Go方法接收一个单独的object参数,就像这样写:
1
2
|
Thread t = new Thread ( new ParameterizedThreadStart (Go));
t.Start ( true );
|
ParameterizedThreadStart的特性是在使用之前我们必需对我们想要的类型(这里是bool)进行装箱操作,并且它只能接收一个参数。
一个替代方案是使用一个匿名方法调用一个普通的方法如下:
1
2
3
4
5
|
static void Main() {
Thread t = new Thread ( delegate () { WriteText ( "Hello" ); });
t.Start();
}
static void WriteText ( string text) { Console.WriteLine (text); }
|
优点是目标方法(这里是WriteText),可以接收任意数量的参数,并且没有装箱操作。不过这需要将一个外部变量放入到匿名方法中,向下面的一样:
1
2
3
4
5
6
7
|
static void Main() {
string text = "Before" ;
Thread t = new Thread ( delegate () { WriteText (text); });
text = "After" ;
t.Start();
}
static void WriteText ( string text) { Console.WriteLine (text); }
|