GUI Winform和结束/终止进程

时间:2012-02-08 16:56:52

标签: 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 " + 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();
    }

4 个答案:

答案 0 :(得分:1)

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

myProcess.WaitForExit();

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

相反,如果您不等待该过程,您将能够立即退出。

您应该能够通过设置Process.EnableRaisingEvents然后订阅流程上的Exited事件来重新设置逻辑以防止阻止。您可以在此事件中将文本添加到RichTextBox,而不是阻止主线程。

答案 1 :(得分:0)

您在myProcess.WaitForExit();打电话给Run_Process。如果从主线程调用Run_Process,那么在命令行工具完成之前,您将阻止该线程。这意味着button3_Click()myProcess完成后无法启动。

答案 2 :(得分:0)

如果您需要退出并立即退出,请尝试Environment.Exit

环境退出方法

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

答案 3 :(得分:0)

Environment.Exit(1);真的很有效。