C# GUI Winform和结束/终止过程

C# GUI Winform和结束/终止过程,c#,winforms,user-interface,process,exit,C#,Winforms,User Interface,Process,Exit,我有一个c#GUI应用程序,它一个接一个地运行一系列命令行进程。在命令行进程运行时,如何结束/终止应用程序? 我有一个退出按钮(按钮3),但如果调用的进程仍在运行,它将不起作用 private void Run_Process(string process_to_run, string p_arg) { Process myProcess = new Process(); richTextBox1.AppendText("\nRunning " + pro

我有一个c#GUI应用程序,它一个接一个地运行一系列命令行进程。在命令行进程运行时,如何结束/终止应用程序? 我有一个退出按钮(按钮3),但如果调用的进程仍在运行,它将不起作用

private void Run_Process(string process_to_run, string p_arg)
    {
        Process myProcess = new Process();
        richTextBox1.AppendText("\nRunning " + process_to_run);

        try
        {
            myProcess.StartInfo.UseShellExecute = false;
            myProcess.StartInfo.FileName = process_to_run;
            myProcess.StartInfo.Arguments = p_arg;
            myProcess.StartInfo.CreateNoWindow = true;
            myProcess.Start();
            myProcess.WaitForExit();
            richTextBox1.AppendText("...Success");
            time_date = get_time();
            log_file.Write(time_date);
            log_file.WriteLine(process_to_run + "...Success");

        }

        catch (Exception ep)
        {
            richTextBox1.AppendText("\n" + ep.Message);
            time_date = get_time();
            log_file.Write(time_date);
            log_file.WriteLine(process_to_run + "...Failed. ERROR: " + ep.Message);
        }
    }     

  private void button3_Click(object sender, EventArgs e)
    {
        db.connection.Close();
        Application.Exit();
    }

现在,您正在等待进程退出:

myProcess.WaitForExit();
如果这种情况发生在UI线程中,那么在方法完成之前,您将无法(干净地)退出,这意味着您必须等待进程完成

相反,如果您不等待进程,则可以立即退出


通过设置并订阅流程上的事件,您应该能够修改逻辑以避免阻塞。在此事件中,您可以将文本添加到
RichTextBox
,而不是阻止主线程。

您可以调用
myProcess.WaitForExit()
运行\u进程中
。如果从主线程调用
Run\u进程
,您将阻塞该线程,直到命令行工具完成。这意味着
按钮3\u Click()
必须在
myProcess
完成后才能启动。

如果您需要退出,现在就退出,请尝试

Environment.Exit方法


终止此进程并向底层操作系统提供指定的退出代码。

环境。退出(1);确实有效。

杀死运行此代码的应用程序或杀死运行此命令的命令提示符?我需要保留WaitForExit()。问题是我有8个进程调用一个接一个。我希望立即终止该进程,并且不会执行下一个进程。您能举个例子吗?@JohnRyann在这种情况下,您可以在后台线程中执行此操作,并终止当前进程。如果你在UI线程上调用WiatForExit,你会阻塞,然后出现这个问题。他无论如何都不会得到按钮点击,因为他的UI线程正在阻塞。