显示窗口 15 分钟后崩溃

Posted

技术标签:

【中文标题】显示窗口 15 分钟后崩溃【英文标题】:Crash 15 minutes after showing a Window 【发布时间】:2016-09-25 09:25:52 【问题描述】:

我有一个应用程序(基于 XNA 项目模板),它在开始时会显示一个窗口,以便用户可以更改一些设置。之后,窗口关闭,程序在 XNA 管理的另一个窗口中继续运行。几乎正好 15 分钟后,程序在一个名为 Win32 的线程中崩溃,该线程不是主线程(但我从未产生过),并且存在访问冲突。

使用标准调试器甚至没有堆栈跟踪。使用本机调试器它只显示访问冲突发生在Kernel32!BaseThreadInitThunk 这是一个未记录的方法。与此同时,主线程似乎仍在愉快地执行主游戏循环。

请记住,该应用程序是纯 C# 应用程序,所以这真的让我感到困惑。

经过一些测试,我发现即使显示一个空窗口也会发生这种情况:

Window window = new Window();
window.ShowDialog();

所以在我的代码中删除上面的两行会使程序完全稳定。重新添加它们可以保证 15 分钟(+- 30 秒)后访问冲突。

我检查了生成窗口的主线程是一个 STA 线程。我也尝试手动启动调度程序,但这似乎没有帮助(调度程序似乎已经在运行),我什至在显示窗口后尝试关闭调度程序,也没有效果。

我还尝试使用this 答案中描述的在多个线程中显示窗口的技术来显示窗口。但这也没有效果。我什至尝试启动一个完全独立的线程来显示窗口(使用相同的技术)。这也没有效果。

这两行代码如何让我的程序在 15 分钟后崩溃?可能需要对空的标准窗口进行什么样的清理?

【问题讨论】:

哦,我刚刚注意到您使用的是ShowDialog()。尝试改用Show()。 WPF 通常希望在最后一个 WPF 窗口/对话框关闭时终止您的应用程序。让我知道您的进展情况,您可以使用一些技巧,以便您仍然可以使用ShowDialog,但要确保 WPF 之后不会关闭您的应用程序 我也尝试过使用显示和关闭(甚至显示和隐藏)。它没有效果。我认为 WPF 只有在您有一个 Application 实例(该实例是 Windows 的所有者并且将 ShutdownMode 设置为 OnLastWindowClose 时)才会尝试关闭您的应用程序。好奇你还有什么其他想法:) 老鼠,我希望就是这样。让我再想一想。你的博客很酷。我喜欢你的平衡生物:) 您能否从窗口中显示更多代码,它如何访问应用程序设置? (我假设这当然是它的作用)。我有一个类似的问题,基本上是因为线程创建问题,我还看到了一个类似的问题,它源于数据在应用程序设置中的存储方式。提前谢谢你。 我在 PowerShell 中使用 COM 对象进行开发时遇到了这个问题,结果证明我没有处理我的资源。用户完成后,您是否正确处理了窗口? 【参考方案1】:

听起来像是一个与内存相关的问题,因为没有正确处理对象......

【讨论】:

以上是关于显示窗口 15 分钟后崩溃的主要内容,如果未能解决你的问题,请参考以下文章

在线程中运行长时间的 Python 计算,并记录到 Qt 窗口,片刻后崩溃

0x8badf00d 在后台获取监听位置后崩溃

单击图像后,相机应用程序崩溃

Tomcat 7 崩溃后无法启动

MacOS Catalina 10.15.4 版中的“Spotlight 意外退出”,安装 Xcode 12 后发生此崩溃

PHP Language Server 服务器在过去 3 分钟内崩溃了 5 次。服务器不会重新启动