Объявление массива ручек ожидания и счетчика
private static WaitHandle[] waithandles;
private static int waitcount;
В конструкторе инициализируйте его
waithandles = new WaitHandle[3] { new AutoResetEvent(false), new AutoResetEvent(false) };
, вам также понадобится функция для увеличения счетчика потоков
private static void incThreadCounter()
{
lock (sobj)
{
waitcount++;
}
}
в коде, где вы инициализируете свой поток, вызовите incThreadCounter ()
Я на самом деле выполняю функцию обратного вызова после того, как поток будет помещен в буфер.Предотвращает ложные подсчеты
в области, в которой ваш автосброс устанавливает цикл while, и уменьшает счетчик нитей, когда они сигнализируют
while (waitcount > 0)
{
WaitHandle.WaitAny(waithandles, 5000);
waitcount--;
}
Когда счетчик равен 0, вы переходите к следующемучасть, которая может наматывать дополнительные потоки
Если вы хотите убедиться, что поток 2 работает после потока 1, вы захотите использовать вариант логики выше.Фактически, если поток 2 всегда должен запускаться после потока 1, а поток 3 всегда должен запускаться после потока 2, тогда вам действительно не нужна многопоточность.Потоки полезны, только если есть процессы, которые могут работать одновременно.
Надеюсь, это поможет