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

本文关键字:机会 资源 应用程序 WPF 外部 终止 | 更新日期: 2023-09-27 18:03:53

目前我正在使用一个由另一个进程启动的WPF应用程序,并且可以在任何时候由另一个进程终止。

当前驱动一个数据采集usb设备,该设备由于不正确的设备断开连接而处于无响应状态。

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

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

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

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

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

如果你的进程被强制终止,你就无能为力了,至少在进程内是这样。您不能运行任何关闭代码,也不能创建特殊的线程,即使在进程被终止后仍继续运行。

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

但是如果你可以安排一些事情,使其他进程和你的进程之间的合作最少,那么你可以利用通常的机制,如Application.Exit事件或窗口的ClosingClosed事件。