使用场景:项目中需要利用cmd调用一个exe程序并等待返回结果,如果长时间没有回应则返回超时。
public static void RunCmd(CompilerData cdata)
{
var cancellationTokenSource = new CancellationTokenSource();
var th = new Thread(() =>
{
Run(cdata); //这个是执行调用cmd并运行exe程序的方法,下面有执行的方法链接
});
cancellationTokenSource.Token.Register(() =>
{
th.Abort();
cdata.TimeOut = true;
//这里查找到第三方exe程序的进程,并杀死该进程
Process[] process = Process.GetProcesses();
var proc = process.FirstOrDefault(i => i.ProcessName == cdata.ExeName);
if (proc != null)
{
if (!proc.HasExited)
{
//立即停止相关进程
proc.Kill();
}
if (proc != null)
{
proc.Close();
proc.Dispose();
proc = null;
}
}
});
//设置超时时间
cancellationTokenSource.CancelAfter(10000);
th.Start();
th.Join();
}