【发布时间】:2023-03-17 17:10:01
【问题描述】:
我在使用 wxWidgets 时遇到了一个奇怪的问题。我有以下代码
MyFrame::OnDoSomeLongThing(...) {
progScreen = new wxProgressDialog(text,text,number,this,wxPD_AUTO_HIDE); // wxProgressDialog *progScreen is class member
doPartOfThing() // calls the update method at the end of it
....
doLastPartOfThing() // again calls update method that pushes value to 100/100
progScreen->Destroy();
}
MyFrame::update() {
progScreen->Update(newValue);
}
现在是这样。我可以从字面上注释掉与 progScreen 相关的行,只需在不使用进度对话框的情况下让进程继续,毕竟,当我关闭主窗口时,我的应用程序会优雅地退出。
但是,仅使用进度对话框就可以以某种方式延长应用程序的寿命。我尝试过 Destroy(),我尝试过简单地“删除 progScreen”,并且每次都尝试过:我将关闭主框架,进程继续运行,并在某个时候以一些天文数字退出。我认为唯一可能相关的是 doPartsOfThings 方法可能会调用 boost::this_thread::sleep,因为它在我的模型类中涉及等待等等。但这不应该与我的问题有任何关系。或者它可能确实... 编辑:我想强调 progScreen->Update() 是从主(GUI)线程调用的。
所以我问,我使用 wxProgressDialog 正确吗?如果没有,应该如何使用?
感谢您的帮助!
编辑:
嗯...事实证明,删除 wxPD_AUTO_HIDE 解决了这个问题。我仍然不太确定问题是什么,但对话框甚至仍然像以前一样。应用按预期关闭。
【问题讨论】:
-
进度和对话框的父子关系是怎么设置的?
-
我将'this'传递给了构造函数的父窗口参数。在编辑中也记录了这一点。
-
我猜你可以尝试移除自动隐藏样式,这样你就会看到对话框是否在完成时被销毁(我假设它是关闭的,你不知道它是否还在)。 - 听起来很像问题在显示的代码中不可见。
-
查看编辑。事实证明,它修复了它。去搞清楚。如果您愿意,可以将其作为答案发布,或者我将发布一个自我答案。