none
关于Window.ShowDialog的问题 RRS feed

  • 问题

  • 关闭DialogA后,DialogB没有弹起,请问为什么?
    DialogA和DialogB都是继承Window的

    //public partial class DialogA : Window
    //public partial class DialogB : Window

    public partial class App : Application
      {
        public App()
        {
          DialogA dlA = new DialogA ();
          Nullable<bool> dialogResult = dlA .ShowDialog();
          
          //DialogA关闭后,执行以下代码,为什么不ShowDialog?
          DialogB dlB= new DialogB ();
          dialogResult = dlB.ShowDialog();
        }
      }
    
    2011年3月10日 9:26

答案

全部回复

  • 你好,

    你这个情况我曾经遇到过,你可以先看下我以前的一个帖子:  http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/fea3d1c2-990e-4973-bb1c-03db83f58c61/

     

    在App的构造函数中,如果显式的Show一个模态窗体的话,在WPF中似乎是有问题的,他阻塞正常的WPF消息循环的创建。主线程停在了:

    USER32!GetMessageW+0x33, calling USER32!NtUserGetMessage

    所以依据我的经验,你不合适在构造中去Show模态窗体,取而代之的是在 Application 的 OnStartup(StartupEventArgs e) 方法中。

    Sincerely,

     


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年3月10日 10:22
    版主
  • HI Bob,

    首先谢谢你的回答。

    你的意思是不是应该像下面那样实现?

    但是没有解决问题,现象还是一样,是不是我有什么地方理解得不对?请指出,谢谢。

    我现在可以避开这一错误的方法是,隐藏第一个窗口,然后在关闭其他ShowDialog后,在关闭第一个窗口或者直接调用shutdown。

      public partial class App : Application
      {
        public App()
        {
    
        }
    
        protected override void OnStartup(StartupEventArgs e)
        {
          base.OnStartup(e);
    
          DialogA dlA = new DialogA();
          Nullable<bool> dialogResult = dlA.ShowDialog();
    
          //DialogA关闭后,执行以下代码,为什么不ShowDialog?
          DialogB dlB = new DialogB();
          dialogResult = dlB.ShowDialog();
        }
      }
    
    
    2011年3月10日 15:00
  • 嗯,我测试了你的代码,是的,问题还是存在。的确是一个消息循环在App开始的时候被一个模态窗体给阻塞了。你可以试试我以前在论坛里面的一个方案,通过Show来实现模态:http://social.msdn.microsoft.com/Forums/zh-CN/wpfzhchs/thread/9cf78b5d-7dae-461d-98e7-7d72c24bae0f/

    不过对于这个问题,你可以尝试去 微软Connect站点去提交以俄国反馈,这样我们的WPF产品开发人员将会接受到这个问题,并且可以给予处理和回复:https://connect.microsoft.com/wpf 谢谢

     

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年3月11日 17:32
    版主