Ron*_*Ron 2 c# foreach multithreading object
我正在尝试启动一个新线程并将参数传递给我的一个方法.参数是a List<string>并包含大约20个字符串项.我可以使用以下代码传递数组:
List<string> strList = new List<string>();
Thread newThread = new Thread(new ParameterizedThreadStart(Class.Method));
newThread.Start(strList);
Run Code Online (Sandbox Code Playgroud)
我的方法定义为:
public void Method(object strList)
{
//code
}
Run Code Online (Sandbox Code Playgroud)
那么我的问题是如何通过此对象中包含的每个字符串运行foreach循环?
Jon*_*eet 10
三种选择:
ParameterizedThreadStart按原样使用,并在方法中强制转换:
public void Method(object strList)
{
List<string> list = (List<string>) strList;
// Use list here
}
Run Code Online (Sandbox Code Playgroud)使用匿名函数以强类型方式捕获变量,并从匿名函数调用强类型方法:
List<string> strList = new List<string>();
ThreadStart action = () => Method(strList);
new Thread(action).Start();
...
public void Method(List<string> list)
{
// Use list here
}
Run Code Online (Sandbox Code Playgroud)使用更高级别的抽象,例如任务并行库或并行LINQ; 取决于你正在做什么,这可能会使事情变得更简单.
如果你不希望启动一个新的线程,我会使用第二种方法-放置"肮脏"本地化开始一个新的线程的方法.任何这些方法都可行.请注意,如果您有多条信息要传递给新线程,第二种方法最终比创建Tuple和解包它更简单.