如何检查线程执行是否完成
本文关键字:执行 是否 线程 何检查 检查 | 更新日期: 2023-09-27 18:11:08
我正在执行一个线程,它调用BCP在命令提示符中使用c# win应用程序。如果线程执行完成,即BCP out完成,我想做一些操作。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
}
}
一个标准的技巧是:
thread1.Join();
thread2.Join();
//can only get here once both threads are finished.
好的,所以你实际上想检查进程是否已经退出?
那么你有System.Diagnostics.Process
的HasExited属性。
这里有一个稍微有点脏的方法:
while(!proc.HasExited){
Thread.Sleep(1000); //wait a second
}
您可以使用Thread.IsAlive
属性
另一种可能性是使用线程在完成时设置的AutoResetEvent。调用线程可以等待多个AutoResetEvents被设置。
使用Process
类,您可以通过将EnableRaisingEvents
属性设置为true
来处理Exited
之类的事件,尽管这在性能方面涉及一些成本。
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.
}