Различие между делегатом. BeginInvoke и поток. Запустить

Существующие связанные вопросы здесь говорят о различиях между:

  • Делегат. BeginInvoke и управление. BeginInvoke
  • Управление. BeginInvoke и поток. Запустить

Но каковы различия между Делегатом. BeginInvoke и Поток. Запустить?

6
задан 5 May 2010 в 11:10
поделиться

2 ответа

Thread.Start запускает новый поток ОС для выполнения делегата. Когда делегат возвращается, поток уничтожается. Это довольно тяжелая операция (запуск и уничтожение потока), поэтому вы обычно делаете это только в том случае, если метод будет длительным.

Delegate.BeginInvoke вызовет делегата в потоке пула потоков. Как только метод возвращается, поток возвращается в пул для повторного использования другой задачей. Преимущество этого заключается в том, что постановка метода в очередь пула потоков относительно легка, поскольку вам не нужно каждый раз запускать целый новый поток.

Control.BeginInvoke вызывает метод в потоке для элемента управления. Компоненты пользовательского интерфейса по своей сути однопоточны, и каждое взаимодействие с элементом управления пользовательского интерфейса должно выполняться в потоке, который его создал. Control.BeginInvoke - удобный способ сделать это.

17
ответ дан 8 December 2019 в 12:18
поделиться

См. Этот вопрос: различия в различных способах создания параллельных программ для получения дополнительной информации о различиях между различными способами выполнения параллельного кода в .net.

2
ответ дан 8 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

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