Существующие связанные вопросы здесь говорят о различиях между:
Но каковы различия между Делегатом. BeginInvoke и Поток. Запустить?
Thread.Start
запускает новый поток ОС для выполнения делегата. Когда делегат возвращается, поток уничтожается. Это довольно тяжелая операция (запуск и уничтожение потока), поэтому вы обычно делаете это только в том случае, если метод будет длительным.
Delegate.BeginInvoke
вызовет делегата в потоке пула потоков. Как только метод возвращается, поток возвращается в пул для повторного использования другой задачей. Преимущество этого заключается в том, что постановка метода в очередь пула потоков относительно легка, поскольку вам не нужно каждый раз запускать целый новый поток.
Control.BeginInvoke
вызывает метод в потоке для элемента управления. Компоненты пользовательского интерфейса по своей сути однопоточны, и каждое взаимодействие с элементом управления пользовательского интерфейса должно выполняться в потоке, который его создал. Control.BeginInvoke
- удобный способ сделать это.
Delegate.BeginInvoke использует ThreadPool для выполнения метода ( См. MSDN ).
Thread.Start создает полностью новый поток.
См. Этот вопрос: различия в различных способах создания параллельных программ для получения дополнительной информации о различиях между различными способами выполнения параллельного кода в .net.