我在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以某种方式处理......
答案 0 :(得分:0)
您需要将Application.ShutdownMode
设置为OnExplicitShutdown
。 http://msdn.microsoft.com/en-us/library/system.windows.application.shutdownmode(v=vs.110).aspx
然后,您可以在对话框关闭后手动关闭应用程序。
mainView.ShowDialog();
Shutdown();