在线程中运行参数化方法

时间:2011-10-06 14:39:38

标签: c# multithreading parameters

我目前正在开发一个c#项目,我需要一个有1个参数的方法作为一个线程运行。

E.g。

    public void myMethod(string path)
    {
       int i = 0;
       while (i != 0)
       {
          Console.WriteLine("Number: " + i);
          i++;
       }
    }

如何从另一个方法调用上述方法,但在线程内运行。

感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:4)

最简单的方法通常是使用匿名方法或lambda表达式:

string path = ...;

Thread thread = new Thread(() => MyMethod(path));
thread.Start();

可以使用ParameterizedThreadStart,但我通常不会。

请注意,如果您在循环中执行此操作,则需要了解正常的"closing over the loop variable"危险:

// Bad
foreach (string path in list)
{
    Thread thread = new Thread(() => MyMethod(path));
    thread.Start();
}

// Good
foreach (string path in list)
{
    string copy = path;
    Thread thread = new Thread(() => MyMethod(copy));
    thread.Start();
}

答案 1 :(得分:1)

new Thread(o => myMethod((string)o)).Start(param);

答案 2 :(得分:0)

简单地将该方法调用包装在一个不带参数但只使用正确参数调用方法的方法中。

public void myWrappingMethod()
{
    myMethod(this.Path);
}

public void myMethod(string path)
{
    // ...
}

或者如果你有lambda可用,只需使用其中一个(根据Jon Skeet的回答)。