Запуск параматеризованного метода в потоке - PullRequest
0 голосов
/ 06 октября 2011

В настоящее время я работаю над проектом ac #, и мне нужен метод с 1 параметром для работы в качестве потока.

Например

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

Как я могу вызвать вышеуказанный метод из другого метода, но выполняющегося внутри потока.

Спасибо за любую помощь, которую вы можете предоставить.

Ответы [ 3 ]

4 голосов
/ 06 октября 2011

Самый простой способ - использовать анонимный метод или лямбда-выражение:

string path = ...;

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

Вы можете использовать ParameterizedThreadStart, но я бы вообще не стал.

Обратите внимание, что если вы делаете это в цикле, вам нужно знать о нормальном «закрытии по переменной цикла» опасность:

// 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 голос
/ 06 октября 2011
new Thread(o => myMethod((string)o)).Start(param);
0 голосов
/ 06 октября 2011

Просто оберните вызов этого метода в метод, который не принимает параметров, но который вызывает ваш метод с правильным параметром.

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

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

Или, если у вас есть доступные лямбды, просто используйте один из них (для ДжонаОтвет Скита).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...