我可以等待一个特定的后台线程完成,然后另一个后台线程启动?
是的。
如果您提供更多信息,我们可以在答案中提供更多详细信息。
通常,您建立一个通信系统(消息队列,事件或委托),用于表示进程/步骤/线程已完成。发生这种情况时,请启动下一个线程。
+1船长明显。 =) – 2010-10-13 16:44:30
当然。让第一个线程启动第二个线程,或设置某种标志告诉主机应用程序启动第二个线程。当然,我必须问:如果这些线程总是按顺序运行,为什么创建第二个线程而不是在第一个线程中执行所有工作?
“为什么要创建第二个线程” - 这通常是正确的,除非第二个线程在第一个线程完成之前可以执行一些*处理。有时候,你可以做一半的工作,但需要等待结果等等。 – 2010-10-13 16:50:12
在.NET 4中,您可以用任务而不是线程,然后使用延续到实现自己的目标:
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();
});
我刚刚学到了一些东西;今天不会是一个完全的浪费! – 2010-10-13 16:48:46
@David:很高兴听到;) – 2010-10-13 16:49:28
是创建的任务运行在一个单独的线程?看起来这可能只是围绕'Thread'的一个更友好的包装。 – 2010-10-13 16:50:49
你应该接受一些你的答案 - 它会让人更快乐,以回复您的问题。 – 2010-10-13 16:43:56