轻轻关闭应用程序并等待其退出



应用程序中的某个地方,我创建了一个Process类型的proc实例,如下所示:

 proc = new Process();
 proc.EnableRaisingEvents = true;
 proc.StartInfo.FileName = Settings.Instance.OBSExeFile;
 proc.Exited += (a, b) => doSomething();
 proc.Start();
 proc.WaitForInputIdle();

Form.Closing事件上,如果它仍然打开,我想轻轻地关闭它。

我发现没有其他方法可以使用 .NET 中的本机内容来做到这一点(Close()Kill()CloseMainWindow()似乎都不符合我的需求),所以我开始向应用程序发送WM_CLOSE并调用Process.WaitForExit(),如下所示:

if (proc != null && !proc.HasExited) {
    if(SendMessage(proc.MainWindowHandle, WM_CLOSE, 0, IntPtr.Zero) == 0)
        proc.WaitForExit();
}

我的问题是:我是否错过了某种东西,因为混合了这种危险?例如,WaitForExit()可以永远挂起吗?

根据您提供的信息,我认为好的方法是创建一个 Windows 服务而不是.exe。然后,您将完全控制过程。

在Windows服务中,您可以创建一个代码,当命令将发送到当前服务时stop该代码"轻轻"关闭当前服务。

它发送一条消息,并让它自行关闭(以您认为合适的任何方式)。 我有一组程序可以做到这一点,为此我使用 udp 广播到 127.0.0.1。

相关内容

  • 没有找到相关文章

最新更新