2010-03-15 134 views
0

当我收到以下异常错误WPF我想更改为实施Login.xaml

Startup="Application_Startup" 

,然后创建了App.xaml.cs下面的方法:

private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     UpdateAccounts(); 
     bool result = true; 
     ///* 
     LoginWindow login = new LoginWindow();    
     result = login.ShowDialog().Value; 
     /* */ 

     if (!result) 
     { 
      return; 
     } 

     MainWindow window = new MainWindow(); 
     bool main = window.ShowDialog().Value; 
    } 

没有人有任何想法是怎么回事?或者对于实现登录界面的最佳实践有什么建议。

异常正在在

布尔抛出主= window.ShowDialog()值。

异常堆栈跟踪:

at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource) 
    at System.Nullable`1.get_Value() 

我MainWindow.xaml是,当应用程序启动,目前正在装载我的默认窗口,它的工作prefectly罚款。它里面有很多代码。几个列表框,几个组合框,月历。它还连接到访问数据库。

对我来说,好像我的窗口是从ShowDialog()直接返回,而不让我设置DialogResult。

更新:如果我将代码更改我没有得到一个例外:

private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     UpdateAccounts(); 
     bool result = true; 
     ///* 
     LoginWindow login = new LoginWindow();    
     result = login.ShowDialog().Value; 
     /* */ 

     if (!result) 
     { 
      return; 
     } 

     MainWindow window = new MainWindow(); 
     window.ShowDialog(); 
    } 

,但我还没有得到我的主窗口中显示出来,并且在登录后的应用程序刚刚关闭

+1

我掐灭了这一点,一切工作正常,但当然我们没有代码“UpdateAcccounts()”或LoginWindow,或者你对MainWindow做的任何事情。你能提供更多关于这些事情的信息吗?此外,如果您可以向我们提供有关抛出异常的更多信息,那也会有所帮助... – 2010-03-15 15:04:49

+0

更新了它,如果我只是使用window.ShowDialog()而不是分配结果到一个变量。但它只是关闭我的应用程序而不显示我的表单并等待。有什么我需要在我的MainWindow中重写它的正常工作?它从Window继承,所以它应该正常工作不应该吗? – 2010-03-15 15:45:29

回答

0

找到一个临时修复,这不是最好的选择,但它的工作原理。

的App.xaml:

<Application x:Class="Power_Scheduler.App" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Startup="Application_Startup" 
    ShutdownMode="OnExplicitShutdown"> 
</Application> 

不得不添加ShutdownMode = “OnExplicitShutdown”

在我的代码我使用的Show()方法而不是ShowDialog的()。

private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     UpdateAccounts(); 
     bool result = true; 
     ///* 
     LoginWindow login = new LoginWindow();    
     result = login.ShowDialog().Value; 
     /* */ 

     if (!result) 
     { 
      return; 
     } 

     MainWindow window = new MainWindow(); 
     window.Show(); 
    } 

它保持应用程序运行并显示主窗口。而在主窗口,我订阅了关闭事件,并添加以下代码:

private void Window_Closed(object sender, EventArgs e) 
    { 
     Application.Current.Shutdown(0); 
    }  

感谢您的帮助大家,

1

从收到的消息看来,您的login.ShowDialog()返回null。

+0

感谢您的提示,但我的窗口甚至没有显示。我的MainWindow.xaml是我以前的默认窗口,有什么我需要设置它显示正确?并显示,直到它关闭? – 2010-03-15 15:36:35

+0

我还没试过,但我认为Application_Startup不是正确的事件,因为您使用LoginWindow阻止执行,因此不会显示任何内容。尝试将该代码移到其他位置(启动事件之后) – ema 2010-03-19 13:39:49