可能导致.NET WinForms应用程序在没有对话框的情况下突然关闭的原因



据报道,我们的WinForms应用程序偶尔会自行关闭。它既没有显示我们自己的崩溃错误提交对话框,也没有显示Windows的错误提交对话框。它只是关闭并消失,通常是当用户感到不安,没有对应用程序做任何事情时。这似乎是一种半罕见的情况,可能一个月发生2-3次,而且发生在不止一个人身上。我不知道从哪里开始得到一个repo案例,也不知道从什么地方开始追踪。

C#.NET 2.0报告的案例在Win XP 上

有人有什么想法吗?

无限递归导致的堆栈溢出是应用程序在没有任何警告的情况下退出的一大原因。除非您故意造成静默退出,否则未处理的异常(堆栈溢出除外)通常会在应用程序退出前显示某种UI。堆栈溢出是该规则最常见的异常(哦,对不起)。

当然,对于非托管或不安全的代码,几乎可以肯定的是,以正确的方式扰乱运行时会导致静默退出。

关于检测和查看Windows事件日志的建议也很好。

异常将导致应用程序"消失"。检查事件日志以查看是否存在任何内容。

检查任务管理器,查看窗口消失时进程是否仍然存在。我遇到了资源管理器崩溃,无法重新绘制窗口,直到它变成Alt Tabbed或Switched to(从任务管理器)。

不要让用户忘记他们正在关闭应用程序。您可能需要在应用程序中放入一些日志记录逻辑,以记录用户启动的关闭。下次它"消失"时,您可以检查任何日志条目。

您可以在FormClosing事件中添加一些逻辑,询问用户是否真的想这样做,然后您可以取消关闭事件,如果一切正常,您的应用程序将继续运行。如果你一直注意到这个问题,而它从来没有执行你的逻辑,你将不得不在调试器中弄脏你的手。

最新更新