C# 线程超时,终止调用第三方程序并返回超时结果

使用场景:项目中需要利用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();
        }

C#执行外部程序之执行DOS命令

你可能感兴趣的:(C# 线程超时,终止调用第三方程序并返回超时结果)