#c# #multithreading #parameters
#c# #многопоточность #параметры
Вопрос:
В настоящее время я работаю над проектом на c #, и мне нужен метод, который имеет 1 параметр для запуска в качестве потока.
Например.
public void myMethod(string path)
{
int i = 0;
while (i != 0)
{
Console.WriteLine("Number: " i);
i ;
}
}
Как я могу вызвать вышеупомянутый метод из другого метода, но работающего внутри потока.
Спасибо за любую помощь, которую вы можете предоставить.
Ответ №1:
Обычно самый простой способ — использовать анонимный метод или лямбда-выражение:
string path = ...;
Thread thread = new Thread(() => MyMethod(path));
thread.Start();
Вы можете использовать a 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. Спасибо, отлично сработало. Было на удивление сложно найти ответ на этот вопрос с помощью Google, намного проще, чем способ, который я нашел в Google, который, похоже, работал не слишком хорошо, еще раз спасибо
Ответ №2:
new Thread(o => myMethod((string)o)).Start(param);
Ответ №3:
Просто оберните этот вызов метода в метод, который не принимает параметров, но который вызывает ваш метод с правильным параметром.
public void myWrappingMethod()
{
myMethod(this.Path);
}
public void myMethod(string path)
{
// ...
}
Или, если у вас есть доступные лямбды, просто используйте один из них (согласно ответу Джона Скита).