2010-10-13 172 views

回答

3

是的。

如果您提供更多信息,我们可以在答案中提供更多详细信息。

通常,您建立一个通信系统(消息队列,事件或委托),用于表示进程/步骤/线程已完成。发生这种情况时,请启动下一个线程。

+2

+1船长明显。 =) – 2010-10-13 16:44:30

4

当然。让第一个线程启动第二个线程,或设置某种标志告诉主机应用程序启动第二个线程。当然,我必须问:如果这些线程总是按顺序运行,为什么创建第二个线程而不是在第一个线程中执行所有工作?

+0

“为什么要创建第二个线程” - 这通常是正确的,除非第二个线程在第一个线程完成之前可以执行一些*处理。有时候,你可以做一半的工作,但需要等待结果等等。 – 2010-10-13 16:50:12

6

在.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(); 
     }); 
+1

我刚刚学到了一些东西;今天不会是一个完全的浪费! – 2010-10-13 16:48:46

+0

@David:很高兴听到;) – 2010-10-13 16:49:28

+0

是创建的任务运行在一个单独的线程?看起来这可能只是围绕'Thread'的一个更友好的包装。 – 2010-10-13 16:50:49