我有一个通过第三方 DLL 访问连接设备的 Windows Mobile 程序。对设备的每次调用都可能花费未知的时间长度,因此每次调用都包含一个超时属性。如果调用返回的时间超过指定的超时时间,则 DLL 会引发异常,我的应用程序可以毫无问题地捕获该异常。
我遇到的问题是关闭应用程序。如果我的应用程序调用了 DLL 并等待超时发生,然后我在超时发生之前关闭了应用程序,我的应用程序将锁定并要求重新启动 PDA。
在正常情况下,我可以确保应用程序在关闭之前等待超时。但是,我试图用来AppDomain.CurrentDomain.UnhandledException
捕获程序中任何未处理的异常,并使用该事件来等待这个挂起的超时发生,以便最终关闭程序。
我的问题是这个事件似乎没有持续足够长的时间。如果我MessageBox.Show("unhandled exception");
在事件中添加一行,然后从我的应用程序的主窗体中抛出一个新的未处理异常,我会在一瞬间看到消息框,但随后它会在我没有单击“确定”按钮的情况下消失。
我在此事件上找到的文档表明,当它被调用时,应用程序已完全致力于关闭并且无法停止关闭,但我认为这并不意味着事件方法本身不会完成。什么给了(我想这就是问题)?
更新: 在完整的窗口(Vista)中,这可以按预期工作,但前提是我使用了Application.ThreadException
.Net CF 2.0中不存在的事件。