Winforms 系统诊断过程

Winforms 系统诊断过程,winforms,system.diagnostics,Winforms,System.diagnostics,我有.NET windows窗体和按钮。单击按钮时,我启动bat文件: //execute batch System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = "test.bat"; proc.StartInfo.WorkingDirectory = Path.GetDirectoryName(path

我有.NET windows窗体和按钮。单击按钮时,我启动bat文件:

        //execute batch
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo.FileName = "test.bat";
        proc.StartInfo.WorkingDirectory = Path.GetDirectoryName(path);
        proc.Start();
        proc.WaitForExit();
我希望能够再次单击按钮并停止执行bat。现在Windows窗体失去焦点,我无法单击该按钮。如何从Windows窗体停止进程

谢谢

试试看

this.Focus(); 
之后


再精确不过了,因为我需要知道bat中运行的是什么,但可能您可以使用Process.Kill方法

为了能够使用它,应该在启动后删除WaitForExit,并将proc变量保存为表单级变量。然后,当您需要关闭流程时,可以尝试

if(!proc.HasExited)
{
    proc.Kill();
    proc.WaitForExit();
}
proc.Dispose();
proc = null;
请注意,以这种方式关闭进程可能会对计算机的稳定性造成危险,具体取决于bat文件正在执行的操作

对于焦点问题,假设这是一个批处理文件,您可以使用CreateNoWindow选项来阻止窗口出现

    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.StartInfo.FileName = "cmd.exe";
    proc.StartInfo.Arguments = "/C test.bat";
    proc.StartInfo.WorkingDirectory = @"c:\temp";
    proc.StartInfo.CreateNoWindow = true;
    proc.StartInfo.UseShellExecute = false;
    proc.Start();

好吧,问题不是很清楚,你需要把焦点放在表单上才能单击停止按钮,或者你需要创建一个停止按钮?你必须去掉WaitForExit()。改为使用Process.Exited事件。
    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.StartInfo.FileName = "cmd.exe";
    proc.StartInfo.Arguments = "/C test.bat";
    proc.StartInfo.WorkingDirectory = @"c:\temp";
    proc.StartInfo.CreateNoWindow = true;
    proc.StartInfo.UseShellExecute = false;
    proc.Start();