Существует 4 основных способа синхронизации потоков в .Net:
- Управление BackgroundWorker
- WaitHandles
- Функции обратного вызова
- опрос объекта ASyncResult
Как правило, вы хотите начать с верхней части этого списка и работать вниз. Это означает, что сначала посмотрите и посмотрите, подходит ли фоновый элемент управления ситуации. Однако это в значительной степени предполагает оконные формы и то, что вы создаете только один новый поток.
Итак, попробуйте следующую ручку ожидания. Waithandles хороши для координации нескольких потоков вместе. Вы можете сбросить их все и подождать, пока они все не завершат, или, если вы хотите, чтобы определенное число было активным, вы продолжаете ждать только одного и порождать следующее, когда оно закончится. Или, может быть, вы знаете, что один поток закончится гораздо раньше, поэтому вы можете подождать, пока он не закончится, выполнить небольшую работу, а затем дождаться окончания остальных.
Ручки ожидания могут показаться немного большими, если, скажем, вы создаете только один дополнительный поток и не хотите блокировать, пока он не закончится. Затем вы можете использовать обратный вызов, чтобы назначенная вами функция вызывалась сразу после завершения потока.
Наконец, если и только если по какой-либо причине ничего из вышеперечисленного не сработает, вы можете вернуться к опросу.
Я могу придумать 5 разных способов получить новый поток в .Net, также примерно в порядке:
- ОС создана, как правило, в результате события winforms (включая BackgoundWorker).
- Obj.Begin ___ () / Конец ____ (). Некоторые классы CLR уже имеют эти асинхронные методы, определенные для вас, и, очевидно, вы хотите использовать их, когда они доступны.
- ThreadPool.QueueUserWorkItem (). Используйте это большую часть времени, чтобы создавать свои собственные темы.
- Delegate.BeginInvoke () / EndInvoke (). Таким способом вы можете обернуть любой метод.
- Thread.start (). Вы могли бы сделать это таким образом, но я недавно что-то прочитал (сейчас у меня нет ссылки), что если QueueUserWorkItem не будет работать, метод делегата, вероятно, лучше.