C#优雅地关闭了一个单独的应用程序,它没有UI

问题描述:

我使用c#进程类来打开没有GUI的单独应用程序。它是一个C++项目,我使用Process.Kill()来结束它。问题是这并不能让它有机会完成它的行动。 Process.Close()只是释放我的主应用程序中的对象,并且让单独的应用程序运行。C#优雅地关闭了一个单独的应用程序,它没有UI

什么是使这个过程优雅地关闭的最佳方式?

+0

该类应该有一个Dispose()方法,用于执行清理并关闭需要关闭的任何对象(或停止运行)。 – jdweng

+0

我认为你不应该使用Process.Kill()。而是在两个应用程序之间发送消息(udp ...),并在完成其操作时终止。 –

+0

[也是一些异步的例子:](http://*.com/a/611127/3060520) –

在过去,我需要从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实例,并且您必须处理在应用程序退出之前外部进程已结束的情况。