ThreadStart с параметрами

Интерфейс используется для полиморфизма, который относится к Объектам, не типам. Поэтому (как уже отмечено) не имеет никакого смысла иметь статического интерфейсного участника.

248
задан 2-bits 18 May 2014 в 07:26
поделиться

9 ответов

Ага:

Thread t = new Thread (new ParameterizedThreadStart(myMethod));
t.Start (myParameterObject);
165
ответ дан 23 November 2019 в 02:59
поделиться

Вы можете использовать метод BackgroundWorker RunWorkerAsync и передать свое значение.

3
ответ дан 23 November 2019 в 02:59
поделиться

Вы можете использовать делегат ParametrizedThreadStart :

string parameter = "Hello world!";
Thread t = new Thread(new ParameterizedThreadStart(MyMethod));
t.Start(parameter);
3
ответ дан 23 November 2019 в 02:59
поделиться

Используйте ParameterizedThreadStart .

8
ответ дан 23 November 2019 в 02:59
поделиться

ParameterizedThreadStart принимает один параметр. Вы можете использовать это для отправки одного параметра или настраиваемого класса, содержащего несколько свойств.

Другой метод - поместить метод, который вы хотите запустить, как член экземпляра в классе вместе со свойствами для параметров, которые вы хотите установить . Создайте экземпляр класса, установите свойства и запустите поток, указав экземпляр и метод, и метод получит доступ к свойствам.

4
ответ дан 23 November 2019 в 02:59
поделиться
class Program
{
    static void Main(string[] args)
    {
        Thread t = new Thread(new ParameterizedThreadStart(ThreadMethod));

        t.Start("My Parameter");
    }

    static void ThreadMethod(object parameter)
    {
        // parameter equals to "My Parameter"
    }
}
29
ответ дан 23 November 2019 в 02:59
поделиться
Thread thread = new Thread(Work);
thread.Start(Parameter);

private void Work(object param)
{
    string Parameter = (string)param;
}

Тип параметра должен быть объектом.

РЕДАКТИРОВАТЬ:

Хотя этот ответ не является неправильным, я не рекомендую этот подход. Использование лямбда-выражения намного проще для чтения и не требует преобразования типов. См. Здесь: https://stackoverflow.com/a/1195915/52551

34
ответ дан 23 November 2019 в 02:59
поделиться

Одна из двух перегрузок конструктора Thread принимает делегат ParameterizedThreadStart, который позволяет передать один параметр методу start . К сожалению, он допускает только один параметр и делает это небезопасным способом, поскольку передает его как объект. Я считаю, что гораздо проще использовать лямбда-выражение для захвата соответствующих параметров и их передачи строго типизированным способом.

Попробуйте следующее

public Thread StartTheThread(SomeType param1, SomeOtherType param2) {
  var t = new Thread(() => RealStart(param1, param2));
  t.Start();
  return t;
}

private static void RealStart(SomeType param1, SomeOtherType param2) {
  ...
}
464
ответ дан 23 November 2019 в 02:59
поделиться

Используйте ParametrizedThreadStart .

8
ответ дан 23 November 2019 в 02:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: