解决方案 »

  1.   


     CloseAuthenticateDialog();
                this.BeginInvoke(new Action(() =>
                {
                    MessageBox.Show("OK");
                }));
      

  2.   

    感谢回复,我知道有几种方式去实现这种效果。但是如果我在Completed 事件加入Close(); 还没有等到Ok对话框弹出。Form3 就close 掉了。我要得是保持模式对话框保持在UI  thread上,这样在我没有点击ok 按钮之前,UI thread 处于阻塞状态,只有我点击ok 按钮之后,forrm3 才关闭。
      

  3.   

    authenticateDialog.Closed += (obj, eve) => MessageBox.Show("OK");你上面的说的是对的,如果你拿spy++看了就会知道,那个阻塞的UI thread block了,并且reason是wait user response
    处理UI消息的主线程,虽然之前收到了WM_Close消息,但还未得及处理完就被模态框阻塞了
      

  4.   

    中间加一句
    Application.DoEvents()试试
      

  5.   

    正常情况下,窗体会对重绘进行优化,如果处于阻塞状态则不重绘,所以明明关闭了窗体,但是并没有消失
    加上Application.DoEvents(),强制窗体重绘
      

  6.   


    spy++,听说过,但没用过,抽空看看。谢谢答疑! 想请教一下怎么实现以下的功能。 点击一个按钮,弹出一个进度条窗口,后台执行一个backgroundworker,在completed事件中去关闭这个进度条窗口后,立即弹出成功提示对话框。现在遇到的问题如题所述。现在的思路,是将显示进度条放在一个单独的线程去做,但是这样做的问题是,显示的进度条窗口不是模式对话框,可以操作父窗体,怎样避免这个问题。
      

  7.   

    加了Application.DoEvents(),就又出现我问的问题了。RunWorkerCompleted事件中先close的dialog,并不会消失,只有当click弹出的MessagBox 的ok 按钮后,才会消失。