【发布时间】:2015-08-16 14:59:11
【问题描述】:
我正在使用 WPF,但没有主窗口(我已经覆盖了 OnStartup 方法)。但是当用户点击某个菜单项时,我想显示设置窗口。
App.xaml.cs:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
new MainEnvironment();
}
MainEnvironment.cs:
NotifyIcon notifyIcon;
Settings settings_wnd = new Settings(); // WPF window
public MainEnvironment()
{
notifyIcon = new NotifyIcon()
{
...
ContextMenu = new ContextMenu(new MenuItem[]
{
new MenuItem("Settings", contextMenu_settingsButton_Click)
})
};
}
void contextMenu_settingsButton_Click(object sender, EventArgs e)
{
if (!this.settings_wnd.IsVisible)
this.settings_wnd.Show();
else
this.settings_wnd.Activate();
}
问题是当用户关闭这个窗口时,整个应用程序也会退出。为什么?我该如何预防呢?
谢谢
【问题讨论】:
-
我创建了 2 个不同的 wpf 窗口,当主窗口启动时,打开另一个。我可以关闭任何窗口而不会导致应用程序终止。所以也许你应该发布更多代码。
-
您在哪个类中运行此代码。
this.settings_wnd是什么?我听起来好像发生了什么是一些代码在窗口关闭时运行,发生异常。该异常没有任何异常处理代码,这会导致应用程序关闭。查看 Windows 中Applications树下的Event Viewer。您应该在那里看到未处理的异常详细信息。 #PsychicDebuging -
@CliveDM 我的情况不同。我没有主窗口。在 app.xaml.cs 中,在 OnStartup 方法中我只运行
new MainEnvironment();。而在这个类的构造函数中是主要代码。所以大部分时间没有窗户。 -
小心
new MainEnvironment()调用,如果您不保留引用,垃圾收集器将在触发时立即收集它。