我有一个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();
}
答案 0 :(得分:1)
现在,您正在等待退出流程:
myProcess.WaitForExit();
如果在UI线程中发生这种情况,那么在方法完成之前,您将无法退出(干净地),这意味着您必须等待该过程完成。
相反,如果您不等待该过程,您将能够立即退出。
您应该能够通过设置Process.EnableRaisingEvents然后订阅流程上的Exited事件来重新设置逻辑以防止阻止。您可以在此事件中将文本添加到RichTextBox
,而不是阻止主线程。
答案 1 :(得分:0)
您在myProcess.WaitForExit();
打电话给Run_Process
。如果从主线程调用Run_Process
,那么在命令行工具完成之前,您将阻止该线程。这意味着button3_Click()
在myProcess
完成后无法启动。
答案 2 :(得分:0)
答案 3 :(得分:0)
Environment.Exit(1);真的很有效。