C#优雅地关闭了一个单独的应用程序,它没有UI
问题描述:
我使用c#进程类来打开没有GUI的单独应用程序。它是一个C++项目,我使用Process.Kill()
来结束它。问题是这并不能让它有机会完成它的行动。 Process.Close()
只是释放我的主应用程序中的对象,并且让单独的应用程序运行。C#优雅地关闭了一个单独的应用程序,它没有UI
什么是使这个过程优雅地关闭的最佳方式?
答
在过去,我需要从GUI C#工具启动一个非GUI C#工具,这两个工具都是我写的。我使用标准输入/输出流在两种工具之间进行通信。
您可以让您的C++工具在其stdin
上侦听指示该工具应正常退出的命令。然后,在您的C#应用程序中,发送quit命令,等待一段合理的时间,如果该工具尚未结束,请将其终止。
我很抱歉,我的C++的不够好,给你的C++方面的例子,但以下线在我的C#项目用来告诉外部进程结束:
m_consoleProcess.StandardInput.WriteLine("QUIT");
m_consoleProcess.WaitForExit(10000);
if (!m_consoleProcess.HasExited)
{
m_consoleProcess.Kill();
}
如果您需要管理单独的外部进程,当然您需要为它们中的每一个存储一个Process
实例,并且您必须处理在应用程序退出之前外部进程已结束的情况。
该类应该有一个Dispose()方法,用于执行清理并关闭需要关闭的任何对象(或停止运行)。 – jdweng
我认为你不应该使用Process.Kill()。而是在两个应用程序之间发送消息(udp ...),并在完成其操作时终止。 –
[也是一些异步的例子:](http://stackoverflow.com/a/611127/3060520) –