Window.ShowDialog的奇怪行为

时间:2013-12-03 08:53:11

标签: c# .net wpf

我在WPF应用程序中遇到了一个奇怪的行为,希望有人能给我一些线索。我有以下覆盖应用程序的OnStartup:

protected override void  OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        try
        {
            if (AppMutex.WaitOne(TimeSpan.Zero, true))
            {
                IoC.Instance.RegisterInstance(LogManager.GetLogger("MainLogger"));
                Init();

                var mainView = new MainView()
                {
                    DataContext = IoC.Instance.MainViewModel                                            
                };

                mainView.ShowDialog();                  
            }
        }
        catch (Exception exception)
        {
            IoC.Instance.Log.Error(exception);
            throw;
        }
        finally
        {
            AppMutex.ReleaseMutex();
        }

    }

这里MainView是System.Windows.Window的子类,没有重写方法。 麻烦在于mainView.ShowDialog()。该行正在执行,没有任何例外,但窗口未显示。线程只是前进,应用程序终止。 有人对这种行为有任何想法吗? 提前谢谢!

UPD: 如果我在此调用之前放置MessageBox.ShowDialog(),则MessageBox.ShowDialog执行正确,但mainView.ShowDialog抛出异常:

窗口关闭后无法设置可见性或调用Show,ShowDialog或WindowInteropHelper.EnsureHandle。

at System.Windows.Window.VerifyCanShow()
at System.Windows.Window.ShowDialog() 

,返回null InnerException。

UPD:我有符号并检查了VerifyCanShow:

private void VerifyCanShow()
{
  if (this._disposed)
    throw new InvalidOperationException(SR.Get("ReshowNotAllowed"));
}

看起来我的mainView以某种方式处理......

1 个答案:

答案 0 :(得分:0)

您需要将Application.ShutdownMode设置为OnExplicitShutdownhttp://msdn.microsoft.com/en-us/library/system.windows.application.shutdownmode(v=vs.110).aspx

然后,您可以在对话框关闭后手动关闭应用程序。

mainView.ShowDialog();
Shutdown();