程序中有一些数据处理的程序,执行需要一段时间,要求不能使用进度条,最好使用弹出模式对话框。本人菜鸟,刚试着学习多线程,但是,一旦模式对话框被domodal()以后,后面的函数就不能被执行了。很头疼,是不是这个思路根本就行不通?如果行得通,怎么在模式对话框DoModal()以后,还能执行其他的数据处理,并且在数据处理完毕之后,模式对话框消失?请教各位大侠给指点,请求详细解答。

解决方案 »

  1.   

    一般都是开线程处理数据,开线程的同时,把主界面的句柄传过去。线程处理一会了,用POSTMESSAGE 给主界面发消息。发完消息,线程会继续工作。主界面收到消息,进行相应的显示。
      

  2.   

    这个很简单负责DoModal的窗口Show或者InitDialog的时候去启动线程。线程工作完毕后,发消息通知DoModal的窗口自己关闭,程序函数正常退出。相关的容错看你的需要来做。
      

  3.   

    可以模态方式调起另外一个exe程序,这个exe当作当前进程的子进程。在当前进程中可以用一个线程来检测这个子进程是否关闭。这里我只能提示个大概思路了,具体代码既不清楚了。
      

  4.   

    可以用非模态对话框,开始的时候show,结束hide
      

  5.   

    先显示出非模态对话框,然后开启一个线程,将对话框句柄传递给线程过程的参数。让线程去执行后台数据处理,等线程返回后,使用PostMessage函数中提供WM_CLOSE关闭非模态对话框。
      

  6.   

    每一个窗口都有一个消息队列,也都有一个线程,比如:button,将窗口的HANDLE 传给worker Thread,处理数据,处理完就像窗口发信息
    模态对话框本身就是一个线程,只不过是DoModal以后,线程暂停了,其他线程还可以运行,不影响worker Thread
      

  7.   

    使用用非模态对话框
    如果用模态对话框,可以将其他的数据处理放在一个线程里,将显示与隐藏对话框放在一个线程里。如果数据处理完成之后向模态对话框POSTTHREADMESSAGE 关闭非模态对话框。