С# поток метод

Если у меня есть

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();