2014-02-18 47 views
0

我正在使用基于Dialog的应用程序。 我的问题是,我想显示等待对话框,直到执行了一些数据库操作。 我用CWinThread的派生类,但问题是,当这个线程关闭时,背景(主应用程序对话框)保持停用意味着(它隐藏在另一个窗口后面)。 我在想,这是因为WaitDialog使用了CWinThread类而发生的。是否有可能在基于对话框的应用程序中从CWinThread类派生类

回答

0

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

+0

哪个选项,你可以告诉我..因为,我以前使用的模型不太对话框中,执行从衍生的CWinThread,但问题是,如果我们在主对话框中单击而在处理,它显示了在崩溃的应用程序没有响应类提供选项,或者等待或关闭应用程序。 – YogeshNC

+0

您需要在无模式对话框的HWND中设置一个HWND变量(CDialog派生类中的全局变量或成员变量),并防止用户点击主对话框中的按钮(如果此HWND不是) NULL –

+0

我尝试了你的建议方法,要求模型少对话框,我也限制所有按钮点击,它工作正常,直到剩余几毫秒完成后台处理,它崩溃,如果我们点击任何地方(主对话框或等待对话框),而所有处理完毕的背景仅剩几毫秒。 – YogeshNC

2

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

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

0

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

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

相关问题