На этот вопрос вроде бы получен ответ, но ответы немного подробны (ИМО).
Давайте рассмотрим каждый из них по очереди.
System.Threading.Thread
Все потоки (в любом случае в CLR) в конечном итоге представлены этим классом.Однако вы, вероятно, включили это в запрос, когда мы можем захотеть создать экземпляр самостоятельно.
Ответ редко.Обычно рабочей лошадкой для выполнения фоновых задач является Threadpool
.Однако есть некоторые обстоятельства, когда мы хотели бы создать нашу собственную нить.Как правило, такой поток будет жить большую часть времени выполнения приложения.Он будет проводить большую часть своей жизни в заблокированном состоянии на ручке ожидания.Иногда мы сигнализируем эту ручку, и она оживает, чтобы сделать что-то важное, но затем она снова ложится спать.Мы не используем рабочий элемент Threadpool для этого, потому что мы не поддерживаем идею, что он может стоять в очереди за большим набором нерешенных задач, некоторые из которых могут быть (возможно, непреднамеренно) заблокированы в другое время ожидания.
System.ComponentModel.BackgroundWorker
Это удобная оболочка класса для рабочего элемента ThreadPool.Этот класс предназначен только для разработчиков, ориентированных на пользовательский интерфейс, которым иногда требуется использовать фоновый поток.Его события, отправляемые в потоке пользовательского интерфейса, упрощают его использование.
System.Threading.ThreadPool.QueueUserWorkItem
Это рабочая рабочая лошадка, когда у вас естьнекоторая работа, которую вы хотите делать в фоновом потоке.Это исключает затраты на выделение и освобождение отдельных потоков для выполнения какой-либо задачи.Он ограничивает количество экземпляров потока, чтобы предотвратить слишком большое количество доступных ресурсов, которые слишком много операций пытаются выполнить параллельно.
QueueUserWorkItem
- мой предпочтительный вариант для запуска фоновых операций.