如何调试在.NET CF 3.5 WinForms Application for Windows CE 6中调用Application.Exit()后发生的致命错误?

如何调试在.NET CF 3.5 WinForms Application for Windows CE 6中调用Application.Exit()后发生的致命错误?,winforms,windows-ce,fatal-error,.net-cf-3.5,Winforms,Windows Ce,Fatal Error,.net Cf 3.5,我正在将.NET CF 1.0 WinForms应用程序(适用于旧版本的Windows CE)移植到.NET CF 3.5(适用于Windows CE 6)。问题是,在调用Application.Exit()几秒钟后,我看到一个“致命错误”消息框,它简单地说了一些“致命错误已经发生,应用程序将终止”的意思。因为我使用的是中文版的Windows CE,所以信息是中文的,我不确定确切的信息是英文的。无论如何,错误消息会自动消失,应用程序无法终止并完全释放资源,从而导致整个操作系统无法使用(启动任何应

我正在将.NET CF 1.0 WinForms应用程序(适用于旧版本的Windows CE)移植到.NET CF 3.5(适用于Windows CE 6)。问题是,在调用Application.Exit()几秒钟后,我看到一个“致命错误”消息框,它简单地说了一些“致命错误已经发生,应用程序将终止”的意思。因为我使用的是中文版的Windows CE,所以信息是中文的,我不确定确切的信息是英文的。无论如何,错误消息会自动消失,应用程序无法终止并完全释放资源,从而导致整个操作系统无法使用(启动任何应用程序都会导致永久沙漏动画,将设备固定在支架中也不会导致ActiveSync连接)直到我热启动设备

此致命错误显然从未在旧设备上以原始形式(.NET CF 1.0)出现

由于它不是.NET异常,.NET运行时不会捕获它


我能做什么?

听起来像是垃圾处理或终结器出现了问题,当GC清理房屋时会出现问题。检查所有应用程序终结器和所有Dispose覆盖。如果找不到它,请查看任何工作线程关闭(阻塞调用、读取可能无效的句柄等)。

因为您无法捕获在
Application.Exit()
上发生的异常,这听起来像是您遇到了我以前见过的错误。请尝试注释掉设置字体属性的所有行。如果应用程序不存在错误消息,则您将面临一个仅影响WinCE 6.0上的NetCF 3.5的错误。有关更多信息,请参阅。

我最近遇到了这个问题,问题是表单未被处理。因此,我必须做的是在每次加载表单时,我将表单实例添加到包含所有打开表单的全局列表中,在应用程序退出时,我循环遍历列表,并对每个表单执行form.dispose。这立刻解决了我的问题。

我想这不是试图处理一个已经处理的对象,否则我会得到一些ObjectDisposedException而不是致命错误,对吗?相反,我应该查看Dispose或finalizers的内部结构,看看是否有什么问题(例如,与本机、非托管DLL的互操作相关的问题),对吗?对,这将是finalizer/Dispose所做的错误。我怀疑它正在调用一个不再存在的对象,可能是一个本机对象(GDI、SQLCE、P/Invoke等),您完全正确!我将所有字体重置为默认字体,不会再出现致命错误。另一个有趣的巧合是,我正在为完全相同的设备(摩托罗拉MC3100)开发。也许你有一个不同的操作系统映像,其中缺少字体?这不太可能,因为我可以在设备上打开Microsoft写字板并选择字体。