2012-05-07 36 views

回答

4

您可以使用ParameterizedThreadStart启动一个带参数的线程。

实施例:

Thread newThread = new Thread(myObj.DoMethod); 
newThread.Start(parameter); 

虽然,我通常最终使用的lambda

Thread newThread = new Thread(() => myObj.DoMethod(param1, param2, param3)); 
newThread.Start(); 

这可以更方便,因为ParameterizedThreadStart采用单个object作为参数。这很少是我想要的。

+0

()=>那是什么宏? (不知道来自java) –

+0

'=>'符号是一个[lambda表达式](http://msdn.microsoft.com/en-us/library/bb397687.aspx)这是编写匿名函数的简短方法。 –

2

你可以使用一个简单的Action<T>那然后调用的参数的方法,只是用一种封闭:

var thread = new Thread(() => 
{ 
    CallSomeMethod(someParam); 
}); 
0

这样做的更多的语言无关的方式是,当该方法只能采取一个参数,你有一个以上的数据块,创建具有属性的新类为每个你想,然后就参数传递该类的一个实例。 (这是你看到的与事件处理相关的对象EventArgs完成的事情。)

话虽如此,使用lambdas的闭包,正如别人所说的那样,是一种相当流畅和简单的做事方式,在实践中方便。