具有动态创建控件的 MFC 应用程序突然停止响应

Posted

技术标签:

【中文标题】具有动态创建控件的 MFC 应用程序突然停止响应【英文标题】:MFC application with dynamically created controls suddenly stops responding 【发布时间】:2015-11-17 08:11:47 【问题描述】:

我有一个 MFC 应用程序 (Visual Studio 2010),它根据用户的后续输入动态创建和销毁大量编辑框、下拉框和按钮。

我使用“Create”函数动态创建控件,在删除控件时系统先对每个控件调用“DestoryWindow”函数,然后删除每个控件指针。

在迭代一定数量的创建/删除控件后,如果我尝试“打开”下拉菜单,系统将无法打开它并停止响应我的输入 - 但如果我不尝试,我可以添加更多控件打开下拉菜单。

有人可以告诉我如何解决这个奇怪的问题吗?这个差点把我逼疯了……

【问题讨论】:

也许你有资源泄漏? 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误在问题本身中重现它所需的最短代码。没有明确的问题陈述的问题对其他读者没有用处。见:How to create a Minimal, Complete, and Verifiable example. 【参考方案1】:

解决方法很简单 - 不要试图“打开”该菜单 :)

现在我假设您想要FIX这个问题。然后你需要弄清楚发生了什么。系统可能由于多种原因没有响应,很可能是以下两种原因之一:

您正处于主 UI 线程的繁忙循环中。 您正在等待一个永远不会发生的事件。例如死锁。

当您的应用程序被冻结时,尝试将调试器附加到它并执行 Debug -> Break All。然后看看执行的是什么代码。如果这种“冻结”的原因不明显,请发布相关代码。

【讨论】:

以上是关于具有动态创建控件的 MFC 应用程序突然停止响应的主要内容,如果未能解决你的问题,请参考以下文章

怎么样在MFC中创建动态控件

[ MFC ] 对话框动态控件的创建 在Picture Control控件上显示图片 [大三TJB_708]

MFC如何动态添加控件

MFC SDI中 如何为动态创建的按钮添加消息处理函数

MFC SDI中 如何为动态创建的按钮添加消息处理函数

VC++(MFC)中动态创建和管理按钮控件,怎么做?