【问题标题】:How to debug a fatal error that happens after calling Application.Exit() in .NET CF 3.5 WinForms application for Windows CE 6?如何调试在 Windows CE 6 的 .NET CF 3.5 WinForms 应用程序中调用 Application.Exit() 后发生的致命错误?
【发布时间】:2011-10-31 02:16:13
【问题描述】:

我正在将 .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 运行时捕获。

我能做什么?

【问题讨论】:

    标签: winforms windows-ce fatal-error .net-cf-3.5


    【解决方案1】:

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

    【讨论】:

    • 你完全正确!我将所有字体重置为默认值,并且不再出现致命错误。另一个有趣的巧合是,我正在为完全相同的设备(摩托罗拉 MC3100)进行开发。
    • 也许您的操作系统映像缺少字体?
    • 这不太可能,因为我可以在设备上打开 Microsoft WordPad 并选择字体。
    【解决方案2】:

    听起来 Dispose 或 Finalizer 在 GC 清理房屋时出现了问题。检查所有应用终结器和所有 Dispose 覆盖。如果找不到,请查看任何工作线程关闭(位于阻塞调用中的事物、读取可能无效的句柄等)。

    【讨论】:

    • 我想这不是试图处理已经处理的对象,否则我会得到一些 ObjectDisposedException 而不是致命错误,对吗?相反,我应该查看 Dispose 或终结器的内部结构,看看是否有任何奇怪的东西(例如与与本机、非托管 dll 互操作相关的东西),对吗?
    • 正确,这将是终结器/Dispose 正在做的事情,这是错误的。我怀疑它正在调用一个不再存在的对象,可能是本机对象(GDI、SQLCE、P/Invoke 等)
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多