是否可以在基于对话框的应用程序中从CWinThread类派生类

时间:2014-02-18 11:31:48

标签: visual-c++ mfc

我正在使用基于Dialog的应用程序。 我的问题是,我想显示Waiting对话框,直到进行一些数据库操作。 我使用了来自CWinThread的Derived类,但问题是,当这个线程关闭时,后台(主应用程序对话框)仍然处于停用状态(它隐藏在另一个窗口后面)。 我在想,这是因为WaitDialog使用了CWinThread类。

3 个答案:

答案 0 :(得分:2)

问题不是基于对话框的应用程序所特有的。在多个线程中创建任何类型的窗口都很困难,不推荐使用。在你的情况下,它听起来像你的等待对话框是模态的,而它的父对话框是在另一个线程中。这更糟糕,可能导致线程之间出现死锁。

可靠的解决方案是将等待对话框(以及所有其他GUI)放在主线程中,并将冗长的数据库处理放在辅助线程中。

答案 1 :(得分:0)

另一种选择是使用Modeless Dialogbox,它也可以选择显示状态并在数据库操作完成时调用DestroyWindow function - 您可能需要禁用主窗口的某些操作但是,无模式对话框是可见的。

答案 2 :(得分:0)

根据我之前回答的评论,看起来这种替代方案在这种情况下是不可行的。

也许更好的方法是创建一个普通的模态“等待”对话框,在对话框的InitDialog中启动后台线程,使用定时器定期检查线程的状态,并在线程完成时结束对话框?