我正在执行一个线程,它使用C#win apps在命令提示符中调用BCP out。 如果线程执行完成,即BCP输出完成,我想做一些动作。 BCP输出在本地机器上进行。 我应该如何检查线程执行是否完成? 我的代码看起来像
using(this.proc = new Process())
{
var procStartInfo =
new ProcessStartInfo(cmdFileName)
{
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true
};
this.proc.StartInfo = procStartInfo;
if(this.proc.Start())
{
var thread1 = new Thread(this.GetError) { IsBackground = true };
var thread2 = new Thread(this.GetOutput) { IsBackground = true };
thread1.Start();
thread2.Start();
// check if thread execution is completed then do some logic
}
}
答案 0 :(得分:3)
标准技巧是:
thread1.Join();
thread2.Join();
//can only get here once both threads are finished.
<强>更新强>
好的,所以你真的想检查一下这个过程是否退出了?
然后您拥有System.Diagnostics.Process
的{{3}}属性。
这是一种略显肮脏的方式:
while(!proc.HasExited){
Thread.Sleep(1000); //wait a second
}
答案 1 :(得分:1)
您可以使用Thread.IsAlive
属性。
另一种可能性是在完成时使用线程设置的AutoResetEvent。调用线程可以等待设置几个AutoResetEvents。完成所有工作后,所有工作都已完成。
答案 2 :(得分:0)
使用Process
类,您可以通过将Exited
属性设置为EnableRaisingEvents
来处理true
之类的事件,但这会在性能方面涉及一些成本。
var p = new Process();
p.EnableRaisingEvents = true;
p.Exited += new EventHandler(p_Exited);
public void p_Exited(object sender, EventArgs e)
{
//handle exiting of process here.
}