我可以等待特定的后台线程完成,然后另一个后台线程启动吗?
答案 0 :(得分:6)
在.NET 4中,您可以使用Task而不是线程,然后使用continuation来实现您的目标:
var firstTask = Task.Factory.StartNew( () => PerformSomeLongRunningAction(); );
var secondTask = firstTask.ContinueWith( t => PerformSecondAction(); );
在.NET< = 3.5中,选项有所不同。最好的方法是使用WaitHandle来指示您的第二项任务。第一个后台线程需要在等待句柄完成时发出信号:
var mre = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem( o =>
{
PerformSomeLongRunningAction();
mre.Set(); // Signal to second thread that it can continue
});
ThreadPool.QueueUserWorkItem( o =>
{
mre.WaitOne(); // Wait for first thread to finish
PerformSecondAction();
});
答案 1 :(得分:4)
不确定。让第一个线程启动第二个线程,或设置某种标志告诉托管应用程序启动第二个线程。当然,我不得不问:如果这些线程总是按顺序运行,为什么要创建第二个线程而不是在第一个线程中执行所有工作呢?
答案 2 :(得分:3)
是
如果您提供更多信息,我们可以在答案中提供更多详细信息。
通常,您设置一个通信系统(消息队列,事件或委托),用于表示进程/步骤/线程已完成。当发生这种情况时,启动下一个线程。