C# GUI Winform和结束/终止过程
我有一个c#GUI应用程序,它一个接一个地运行一系列命令行进程。在命令行进程运行时,如何结束/终止应用程序? 我有一个退出按钮(按钮3),但如果调用的进程仍在运行,它将不起作用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
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线程正在阻塞。