C# 线程,如何使线程运行带有参数的方法

本文关键字:线程 参数 方法 行带 运行 何使 | 更新日期: 2023-09-27 18:33:22

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

C# 线程,如何使线程运行带有参数的方法

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

例:

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

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

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

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

您可以使用

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

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

正如 root46 已经回答的那样,如果直接使用线程,请使用 ParameterizedThreadStart。但是,如果您使用的是 .NET 4 或更高版本,也请查看任务和任务并行库。

执行此操作

的更多语言不可知的方法是,当该方法只能接受单个参数并且您拥有多个数据时,创建一个新类,其中包含所需每个参数的属性,然后只传递该类的实例。 (这是您看到的与事件处理相关的EventArgs对象所完成的操作。

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