2

使用全局变量作为参数是唯一的方法还是有更时尚的方法?

4

4 回答 4

4

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

例子:

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

虽然,我通常最终使用 lambdas

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

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

于 2012-05-07T18:14:16.647 回答
2

您可以使用一个简单的闭包Action<T>,然后使用参数调用您的方法:

var thread = new Thread(() =>
{
    CallSomeMethod(someParam);
});
于 2012-05-07T18:14:51.637 回答
0

正如 root46 已经回答的那样,如果直接使用线程,则使用ParameterizedThreadStart。但是,如果您使用 .NET 4 或更高版本,还可以查看TaskTask Parallel Library 。

于 2012-05-07T18:18:03.070 回答
0

更与语言无关的方法是,当该方法只能接受一个参数并且您有多个数据时,请为您想要的每个参数创建一个具有属性的新类,然后只需传递一个那堂课。(这就是您看到的EventArgs与事件处理相关的对象所做的事情。)

话虽如此,正如其他人所说,使用 lambdas 的闭包是一种相当巧妙和简单的做事方式,在实践中往往更方便。

于 2012-05-07T18:26:55.960 回答