【问题标题】:Closing WPF MainWindow关闭 WPF 主窗口
【发布时间】:2010-10-20 14:41:29
【问题描述】:

我在一个 WPF 应用程序中显示了一个登录对话框,该应用程序上有一个取消按钮,而不是尝试登录应用程序,而是将其关闭。问题是,我有一个出现在主窗口窗体上的用户控件,所以如果我尝试运行 Application.Current.Shutdown() 或 this.Close() 方法,我会从分配一个事件到用户控件上的特定控件。异常是 NullReferenceException,即对象引用未设置为对象的实例。

根据我对 WPF 的有限理解,当我尝试关闭应用程序时,似乎有另一个线程(UI 线程?)尝试初始化 MainWindow 上的组件。我不确定这是否正确,但我希望这里的人能阐明它为什么这样做以及任何阻止它的方法,以便我可以正确关闭应用程序。

更多信息,这个登录对话框和随后的 Application.Current.Shutdown() 方法都发生在 MainWindow 构造函数中,不知道是否有帮助。

感谢您的帮助。

【问题讨论】:

  • 你能把代码贴出来,并告诉它在哪里抛出异常。

标签: wpf


【解决方案1】:

我怀疑您在释放主窗口之前没有删除事件处理程序,这可能会导致此异常。

【讨论】:

  • 公共事件 RoutedEventHandler NewModelClick { add { TopMenu.NewModelClick += value; } 删除 { TopMenu.NewModelClick -= 值; } }
  • 它在 add{ TopMenu.NewModelClick += value; 上抛出异常} 行,TopMenu 为 NULL
  • @Walter:请使用此信息编辑您的原始问题。像这样的事情往往会在评论部分丢失,尤其是在原始问题方面。为此,请在上面的帖子下选择“编辑”,然后将信息粘贴到那里。粘贴时请务必突出显示您的代码,然后选择“代码”按钮(带有 1 和 0 的那个),以便代码显示为格式化代码。
【解决方案2】:

好吧,没关系,我得到了答案,我将 InitialiseComponent() 方法放在 if 语句周围,如果用户单击退出,则将 bool 设置为 false,Happy days :)

【讨论】:

  • 如果您在组件初始化期间显示对话框,您可以在对话框关闭后调用 return 以防止应用程序初始化窗口的其余部分。
猜你喜欢
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
相关资源
最近更新 更多