C# 使WPF应用程序即使在外部终止时也有机会清理其资源

C# 使WPF应用程序即使在外部终止时也有机会清理其资源,c#,wpf,dispose,C#,Wpf,Dispose,目前,我正在使用一个WPF应用程序,它由另一个进程启动,并且可以随时由另一个进程终止 它当前驱动的数据采集usb设备由于未连接设备断开而处于无响应状态 我想知道在终止之前,it有机会释放硬件资源的合适方式是什么 是否存在始终由应用程序实例运行的事件 我是否可以创建一个超出应用程序实例的线程,并发送device.Disconnect()消息 听起来你的主要问题是USB设备有问题。Windows进程在任何时候都可能发生任何事情;设备需要能够处理这个问题。如果与之交互的过程消失,设备需要能够识别并处理

目前,我正在使用一个WPF应用程序,它由另一个进程启动,并且可以随时由另一个进程终止

它当前驱动的数据采集usb设备由于未连接设备断开而处于无响应状态

我想知道在终止之前,it有机会释放硬件资源的合适方式是什么

  • 是否存在始终由应用程序实例运行的事件
  • 我是否可以创建一个超出应用程序实例的线程,并发送
    device.Disconnect()
    消息

  • 听起来你的主要问题是USB设备有问题。Windows进程在任何时候都可能发生任何事情;设备需要能够处理这个问题。如果与之交互的过程消失,设备需要能够识别并处理它。我不知道具体细节(我自己不是驱动程序的作者),但是有很多USB设备并不是仅仅因为使用它的程序被强制终止而停止工作

    这就是说,这就引出了第二个问题:从你的描述来看,似乎“其他进程”正在强制终止你的程序。为什么?有更多优雅的方式让程序退出。至少,只需在主窗口中发送
    WM_CLOSE
    命令,就好像用户正在单击“关闭”按钮、按Alt+F4等。更好的是,提供某种类型的进程间通信(例如命名管道),以允许父进程向您的程序发出特定命令,包括一个关闭命令

    如果您的流程被强制终止,您对此无能为力,不管怎样,都不能从该流程内部进行。您不能运行任何关闭代码,也不能创建特殊的线程,即使在进程被终止后仍能继续运行

    一种选择是编写另一个程序,一个监视程序状态的“看门狗”。如果您的程序被终止,那么看门狗可以清理USB设备。但这不是万灵药;有人也可能杀死看门狗程序,让你回到你开始的地方


    但是,如果您可以安排事情,使其他进程与您的进程之间的合作最少,那么您可以利用通常的机制,例如事件、窗口或事件。

    Hmm。。。让我想起了过去。不过,与您的问题相比,这并不完全公平,因为您有一些合理的期望。@JDB这是一个很好的故事!拉插头有点极端,但是“终止任务管理器”,甚至堆栈溢出错误是一些我想考虑的事情。即使答案是“不行,老兄”,因为这样我就会发现情况并寻找另一种解决问题的方法。太好了。你的第三段是我想确定的,谢谢。在本例中,第二和第四段包含了正确的行动路径,因为我可以像您所说的那样安排事情(也就是说,“我拥有代码”)。如果我无法访问终止WPF进程的程序的源代码,那么第三个选项将是一个不错的选择。非常感谢你!