У меня есть приложение на основе форм. Пользовательский интерфейс обрабатывается потоком. Из потока пользовательского интерфейса я создаю 3 потока для выполнения некоторой обработки.Синхронизация потоков в C#
Thread t1 = new Thread(() => performprocessing());
Thread t2 = new Thread(() => performprocessing());
Thread t3 = new Thread(() => performprocessing());
Теперь я хочу, чтобы выполнить инструкцию в потоке пользовательского интерфейса после того, как все 3 нити заканчивают execution.So, я сделал следующее:
do
{
} while (t1.IsAlive || t2.IsAlive || t3.IsAlive);
/*--execute statement---*/
Но я хочу, чтобы интерфейс оставаться отзывчивым также. В этом случае поток пользовательского интерфейса застревает в цикле, пока все три потока не закончат выполнение. Как это сделать?
Я читал о событиях ручной и автоматической перезагрузки, но я не уверен, как их использовать в этом случае. Прошу вас посоветуйте.
Пожалуйста, не используйте это. Ваш 'if (workerCompleted == 3)' не является потокобезопасным. Там может быть возможность - до отношений здесь. Помните, что OP не дал контекста того, как будут использоваться потоки, только что он имеет поток пользовательского интерфейса и 3 отдельных рабочих потока. –
Ответ обновлен, чтобы удалить проблему с потоками и сделать ее более общей, спасибо @ dan-pantry – Marko