shutdownmode枚举类型介绍
shutdownmode
是一个枚举类型,它定义了wpf应用程序的关闭方式。这个枚举类型有三个成员:
- onlastwindowclose:当最后一个窗口关闭或者调用system.windows.application.shutdown方法时,应用程序会关闭。
- onmainwindowclose:当主窗口关闭或者调用system.windows.application.shutdown方法时,应用程序会关闭。
- onexplicitshutdown:只有当调用system.windows.application.shutdown方法时,应用程序才会关闭。
整理成表格如下所示:
枚举成员 | 含义 |
---|---|
onlastwindowclose | 当最后一个窗口关闭或者调用system.windows.application.shutdown方法时,应用程序会关闭。 |
onmainwindowclose | 当主窗口关闭或者调用system.windows.application.shutdown方法时,应用程序会关闭。 |
onexplicitshutdown | 只有当调用system.windows.application.shutdown方法时,应用程序才会关闭。 |
实践
mainwindow的xaml如下:
0
mainwindow的cs如下:
using system;
using system.windows;
using system.windows.controls;
namespace applicationshutdown
{
///
/// interaction logic for mainwindow.xaml
///
public partial class mainwindow : window
{
public mainwindow()
{
initializecomponent();
}
private void mainwindow_loaded(object sender, routedeventargs e)
{
shutdownmodelistbox.items.add("onlastwindowclose");
shutdownmodelistbox.items.add("onexplicitshutdown");
shutdownmodelistbox.items.add("onmainwindowclose");
shutdownmodelistbox.selectedvalue = "onlastwindowclose";
shutdownmodelistbox.selectionchanged =
shutdownmodelistbox_selectionchanged;
application.current.shutdownmode = shutdownmode.onlastwindowclose;
}
private void shutdownmodelistbox_selectionchanged(object sender, selectionchangedeventargs e)
{
application.current.shutdownmode =
(shutdownmode) enum.parse(typeof (shutdownmode), shutdownmodelistbox.selectedvalue.tostring());
}
private void newwindowbutton_click(object sender, routedeventargs e)
{
(new childwindow()).show();
}
private void explicitshutdownbutton_click(object sender, routedeventargs e)
{
var exitcode = 0;
int.tryparse(appexitcodetextbox.text, out exitcode);
application.current.shutdown(exitcode);
}
}
}
childwindow的xaml如下:
childwindow的cs如下:
using system;
using system.componentmodel;
using system.windows;
namespace applicationshutdown
{
///
/// interaction logic for childwindow.xaml
///
public partial class childwindow : window
{
public childwindow()
{
initializecomponent();
}
private void childwindow_closing(object sender, canceleventargs e)
{
console.writeline(@"closing");
var result = messagebox.show("allow shutdown?", "application shutdown sample",
messageboxbutton.yesno,
messageboximage.question);
e.cancel = (result == messageboxresult.no);
}
private void childwindow_closed(object sender, eventargs e)
{
console.writeline(@"closed");
}
}
}
onlastwindowclose
当最后一个窗口关闭或者调用system.windows.application.shutdown方法时,应用程序会关闭。
最后一个窗口关闭:
调用system.windows.application.shutdown方法:
onmainwindowclose
当主窗口关闭或者调用system.windows.application.shutdown方法时,应用程序会关闭。
主窗口关闭:
或者调用system.windows.application.shutdown方法关闭,与上面效果相同,这里就不重复了。
onexplicitshutdown
只有当调用system.windows.application.shutdown方法时,应用程序才会关闭。
普通关闭:
关闭所有窗口之后,程序并不会停止。
调用system.windows.application.shutdown方法:
总结
本文介绍了wpf程序的三种不同的关闭模式,分别是onlastwindowclose、onmainwindowclose与onexplicitshutdown。
• onlastwindowclose:当最后一个窗口关闭或者调用system.windows.application.shutdown方法时,应用程序会关闭。
• onmainwindowclose:当主窗口关闭或者调用system.windows.application.shutdown方法时,应用程序会关闭。
• onexplicitshutdown:只有当调用system.windows.application.shutdown方法时,应用程序才会关闭。
借助图解更好理解:
代码来源
[wpf-samples/application management/applicationshutdown at main · microsoft/wpf-samples (github.com)]( management/applicationshutdown)