显示窗口 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 窗口,片刻后崩溃
MacOS Catalina 10.15.4 版中的“Spotlight 意外退出”,安装 Xcode 12 后发生此崩溃