mfc 按下保存对话框的保存按钮时,对话框卡住了,要等一会儿之后才会消失。当然按下保存按钮之后我还进行了一些耗时的操作,其实我就是想按下保存按钮之后,这个对话框立即消失,然后再去执行程序的其余部分。
首先我想它肯定先发送了一个关闭对话框的消息,然后发送了一个WM_PAINT消息重绘窗口。但是这个重绘消息优先级较低,暂时没有执行。我就直接Invalidate(),UpdateWindow()进行立即重绘也不起作用。
后来我又想可能关闭和重绘操作时异步的,我就在之后sleep()了一下,不过还是不好使。
再后来我就没有办法了。
还请各位大牛指教!mfc对话框处理

解决方案 »

  1.   

    如果这个操作是你程序的结束,可以先ShowWindow(SW_HIDE)隐藏对话框,等处理程序完了自然退出
    如果可以不用同步操作,那么耗时的操作可以启动一个线程后台来处理
    如果要同步 那么可以加一个进度条或提示信息,表示你在努力中
      

  2.   


    其实那个耗时的操作本身就在另外一个线程中。所以在主线程中才要while循环等待那个线程执行完返回结果。这样就造成了上述的结果.
    还有如果ShowWindow(SW_HIDE)隐藏对话框,可以实现将窗口隐藏,那它为何不先进行关闭呢。我肯定已经发送了关闭的消息,不然它也不会最后就关闭了
      

  3.   

    处理CLOSE消息和你这个耗时操作在同一线程,你这操作不退出窗口也就无法处理
      

  4.   

    把你费时的操作放到线程函数中去做,没事的时候线程等待。当你按下保存对话框上的OK按钮的时候,得到保存文件的路径之后,直接PostThreadMessage通知线程做事情,并将路径传递给线程函数。
      

  5.   


    我费时的操作就是打印,本来是应该开启一个后台线程来做的,不过原来的代码就是使用mfc自带的打印功能。即是通过CView::onviewprint()方法。它将打印过程分成几个过程,我不知道如何使用异步进行。
    1.我尝试过在入口处CView::onviewprint()进行异步操作,不过mfc的处理好像是和界面相关的。所以不成功。
    2.我尝试在Doprinting()方法中开启一个UI线程来弹出保存对话框,供用户输入路径。但是它却要等待整个主线程执行完了之后才执行这个线程中的内容。当然不是优先级问题,因为我设定了最高优先级也不行。当然也不是线程类型问题,我使用了后台线程也不行。
    还请各位大侠指教,在下感激不尽!!!