C# - 循环通过从新线程传递的对象参数

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和解包它更简单.