С# поток метод
Если у меня есть
public void Method(int m)
{
...
}
как я могу создать поток для этого метода?
Thread t = new Thread ((Метод));
t.Start(м);
не работает.
Ответы
Ответ 1
Метод, который вы вызываете, требует параметра. Поскольку у него есть один параметр и возвращаемый тип void, вы можете использовать следующие
ThreadPool.QueueUserWorkItem(o => Method(m));
Вам не нужно менять int на объект в сигнатуре метода, используя этот метод.
Есть преимущества использования ThreadPool для запуска собственного потока вручную.
Thread vs ThreadPool
Ответ 2
Вы можете сделать это, используя выражение лямбда. Компилятор С# автоматически создает делегат ThreadStart
за кулисами.
Thread t = new Thread(() => Method(m));
t.Start();
Обратите внимание, что если вы измените m
позже в своем коде, изменения будут распространяться в поток, если он еще не ввел Method
. Если это проблема, вы должны сделать копию m
.
Ответ 3
ThreadStart tsd = new ThreadStart(ThreadMethod);
Thread t = new Thread(tsd);
t.Start();
Способы потоков должны быть методом с возвратом типа void и не принимать никаких аргументов.
public void ThreadMethod() {.....}
Существует еще один вариант, который ParameterizedThreadStart
ParameterizedThreadStart ptsd = new ParameterizedThreadStart(ThreadParamMethod);
Thread t = new Thread(ptsd);
t.Start(yourIntegerValue);
ThreadParamMethod - это метод, который возвращает тип void и принимает один аргумент объекта типа. Однако вы можете передать практически любую вещь как объект.
public void ThreadParamMethod(object arg) {.....}
Ответ 4
Метод должен взять объект, а не int, чтобы иметь возможность использовать делегат ParameterizedThreadStart.
Итак, измените m на объект и сначала отбросите его на int.
Ответ 5
попробуйте:
Thread t = new Thread(new ThreadStart(method));
t.Start();