WPF/C#:程序关闭的三种模式
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如下:
<Window x:Class="ApplicationShutdown.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:ApplicationShutdown"mc:Ignorable="d"Title="MainWindow" Height="350" Width="525" Loaded="MainWindow_Loaded"><DockPanel><StackPanel DockPanel.Dock="Top" Orientation="Horizontal"><Label HorizontalAlignment="Left">Shutdown Mode:</Label><ComboBox HorizontalAlignment="Left" Name="shutdownModeListBox" /></StackPanel><StackPanel DockPanel.Dock="Top" Orientation="Horizontal"><Label HorizontalAlignment="Left">Application Exit Code (for explicit shutdown):</Label><TextBox HorizontalAlignment="Left" Name="appExitCodeTextBox">0</TextBox></StackPanel><Button DockPanel.Dock="Top" Click="newWindowButton_Click">New Window</Button><Button DockPanel.Dock="Top" Click="explicitShutdownButton_Click">Shutdown Explicitly (Passing Exit Code)</Button><Canvas /></DockPanel>
</Window>
MainWindow的cs如下:
using System;
using System.Windows;
using System.Windows.Controls;namespace ApplicationShutdown
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>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如下:
<Window x:Class="ApplicationShutdown.ChildWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:ApplicationShutdown"mc:Ignorable="d"Title="ChildWindow" Height="300" Width="300" Closing="ChildWindow_Closing" Closed="ChildWindow_Closed"><Grid/>
</Window>
ChildWindow的cs如下:
using System;
using System.ComponentModel;
using System.Windows;namespace ApplicationShutdown
{/// <summary>/// Interaction logic for ChildWindow.xaml/// </summary>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)](https://github.com/microsoft/WPF-Samples/tree/main/Application Management/ApplicationShutdown)
相关文章:
WPF/C#:程序关闭的三种模式
ShutdownMode枚举类型介绍 ShutdownMode是一个枚举类型,它定义了WPF应用程序的关闭方式。这个枚举类型有三个成员: OnLastWindowClose:当最后一个窗口关闭或者调用System.Windows.Application.Shutdown方法时,应用程序会关闭。O…...
登录/注册- 滑动拼图验证码(IOS/Swift)
本章介绍如何使用ios开发出滑动拼图验证码,分别OC代码和swift代码调用 1.导入项目model文件OC代码(下载完整Demo) 2.放入你需要显示的图片 一:OC调用 #import "ViewController.h" #import "CodeView.h"…...
MyBatis进行模糊查询时SQL语句拼接引起的异常问题
项目场景: CRM项目,本文遇到的问题是在实现根据页面表单中输入条件,在数据库中分页模糊查询数据,并在页面分页显示的功能时,出现的“诡异”bug。 开发环境如下: 操作系统:Windows11 Java&#…...
网站调用Edge浏览器API:https://api-edge.cognitive.microsofttranslator.com/translate
Edge浏览器有自带的翻译功能,在运行pc项目可能会遇到疯狂调用Edge的API https://api-edge.cognitive.microsofttranslator.com/translate 这个URL(https://api-edge.cognitive.microsofttranslator.com/translate)指向的是微软服务中的API接…...
css实现优惠券样式
实现优惠券效果: 实现思路: 需要三个盒子元素,使用 css 剪裁,利用 ellipse 属性,将两个盒子分别裁剪成两个半圆,位置固定在另一个盒子元素左右两边适当位置上。为另一个盒子设置想要的样式,圆角…...
函数递归(C语言)(详细过程!)
函数递归 一. 递归是什么1.1 递归的思想1.2 递归的限制条件 二. 递归举例2.1 求n的阶乘2.2 按顺序打印一个整数的每一位 三. 递归与迭代3.1 求第n个斐波那契数 一. 递归是什么 递归是学习C语言很重要的一个知识,递归就是函数自己调用自己,是一种解决问题…...
uniapp 接口请求封装
根目录下创建 config目录 api.js request.js // request.js // 封装一个通用的网络请求函数 适当调整 function httpRequest(options) {const userToken uni.getStorageSync(access_token).token;return new Promise((resolve, reject) > {uni.request({url: ${options.ur…...
C++中的观察者模式
目录 观察者模式(Observer Pattern) 实际应用 股票价格监控系统 发布-订阅系统 总结 观察者模式(Observer Pattern) 观察者模式是一种行为型设计模式,它定义了对象间的一对多依赖关系。当一个对象的状态发生改变…...
conda虚拟环境,安装pytorch cuda cudnn版本一致,最简单方式
1、pytorch版本安装(卸载也会有问题) (1)版本如何选择参考和卸载 https://zhuanlan.zhihu.com/p/401931724 (2)对应版本如何安装命令 https://pytorch.org/get-started/previous-versions/ 最简答安装参考…...
第 5 章:面向生产的 Spring Boot
在 4.1.2 节中,我们介绍了 Spring Boot 的四大核心组成部分,第 4 章主要介绍了其中的起步依赖与自动配置,本章将重点介绍 Spring Boot Actuator,包括如何通过 Actuator 提供的各种端点(endpoint)了解系统的…...
在 Windows 操作系统中,可以通过命令行工具来杀死进程
1. 使用 taskkill 命令 taskkill 命令是一个用于终止进程的命令行工具,可以通过进程名称或进程 ID (PID) 来杀死进程。 按进程名称杀死进程 taskkill /IM processname.exe /Fprocessname.exe 是进程的名称。/F 参数表示强制终止进程。 例如,终止名为…...
uni-app文件下载 h5 xls 乱码 锟斤拷 Blob pdf打不开
原先下载方式,PC管理端和浏览器打开文件能下载,xls没出现乱码,pdf能正常显示,H5下载xls乱码锟斤拷,PDF显示空白内容 怀疑是前端问题,也尝试过修改后端代码 后端设置编码格式 response.setCharacterEncoding(characte…...
Vue25-内置指令02:v-text指令
一、v-html对比v-text v-html支持结构的解析,v-text不支持结构的解析。 二、v-html的安全性问题 2-1、cookie的原理(node.js) 7天免登录,cookie实现。 cookie的本质就是类似于json的字符串,格式是:key-va…...
stable diffusion中的negative prompt是如何工作的
https://stable-diffusion-art.com/how-negative-prompt-work/https://stable-diffusion-art.com/how-negative-prompt-work/https://zhuanlan.zhihu.com/p/644879268...
STM32项目分享:智能小区充电桩系统
目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…...
PDU模块中浪涌保护模块与空开模块的应用
由于PDU具体应用的特殊性,其在规划设计时具有应用场景的针对性,同时PDU的高度定制化的特点,是其他电气联接与保护产品所不具备的。 PDU基础的输出输入功能外,其电路的控制与电压保护器同时也极为重要。空气开关和浪涌保护器相关功…...
19、Go Gin框架集成Swagger
介绍: Swagger 支持在 Gin 路由中使用一系列注释来描述 API 的各个方面。以下是一些常用的 Swagger 注释属性,这些属性可以在 Gin 路由的注释中使用: Summary: 路由的简短摘要。Description: 路由的详细描述。Tags: 用于对路由进行分类的标…...
自动同步库数据——kettle开发36
kettle中的那些人工智能。 一、kettle的AI能力目录 跨库同步 2.自动开发 3.自动优化 二、AI实例 1、跨库同步 sqlsever表同步至oracle数据库 1.1源库sqlserver 1.2目标库oracle 1.3可视化跨库同步 使用多表复制向导 选择跨库的表,下一步下一步,即可…...
MSOCache在电脑中可以删除吗?
MSOCache文件夹在电脑中是可以删除的。但删除前需要了解以下几点: MSOCache文件夹的作用: MSOCache文件夹是Microsoft Office的本地安装源,用于存储Office安装和更新过程中所需的临时文件,如安装程序所需的组件、配置设置以及更新…...
数据网格和视图入门
WinForms数据网格(GridControl类)是一个数据感知控件,可以以各种格式(视图)显示数据。本主题包含以下部分,这些部分将指导您如何使用网格控件及其视图和列(字段)。 Grid Control’s…...
Hugo Coder性能优化技巧:提升网站加载速度的7个方法
Hugo Coder性能优化技巧:提升网站加载速度的7个方法 【免费下载链接】hugo-coder A minimalist blog theme for hugo. 项目地址: https://gitcode.com/gh_mirrors/hu/hugo-coder 如果你正在使用Hugo Coder主题来构建个人博客或开发者网站,那么网站…...
像素剧本圣殿惊艳案例:故障艺术标题下生成的赛博朋克短剧完整场次
像素剧本圣殿惊艳案例:故障艺术标题下生成的赛博朋克短剧完整场次 1. 像素剧本圣殿创作工具介绍 Pixel Script Temple(像素剧本圣殿)是一款基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。这个独特的创作平台将先进的AI推理能力与复…...
LoRA训练助手GPU显存优化:Qwen3-32B INT4量化后仅需9.2GB显存稳定运行
LoRA训练助手GPU显存优化:Qwen3-32B INT4量化后仅需9.2GB显存稳定运行 1. 引言:当大模型遇见显存焦虑 如果你尝试过在个人电脑上运行大语言模型,大概率会遇到一个令人头疼的问题:显存不足。特别是像Qwen3-32B这样拥有320亿参数的…...
Pixel Epic效果可视化:研报生成后自动进行事实核查与数据溯源标注演示
Pixel Epic效果可视化:研报生成后自动进行事实核查与数据溯源标注演示 1. 引言:当研报写作遇上像素冒险 在金融分析和行业研究领域,撰写高质量研究报告一直是个耗时费力的过程。传统方式下,分析师需要花费大量时间收集数据、验证…...
3个AI编程助手功能让JetBrains开发者效率提升80%
3个AI编程助手功能让JetBrains开发者效率提升80% 【免费下载链接】continue ⏩ Source-controlled AI checks, enforceable in CI. Powered by the open-source Continue CLI 项目地址: https://gitcode.com/GitHub_Trending/co/continue Continue作为一款开源的AI编程助…...
Linux党福利:Debian12下用VSCode+SDCC玩转51单片机(含WSL配置指南)
Debian 12下构建开源51单片机开发环境:VSCodeSDCC全攻略 在Linux环境下开发51单片机一直是个小众但极具技术挑战性的选择。相比Windows平台上Keil的垄断地位,开源工具链在Linux上的表现往往被低估。本文将带你用VSCodeSDCC在Debian 12上搭建一个完整的51…...
窗口总乱跑?PersistentWindows让你的桌面布局稳如泰山
窗口总乱跑?PersistentWindows让你的桌面布局稳如泰山 【免费下载链接】PersistentWindows fork of http://www.ninjacrab.com/persistent-windows/ with windows 10 update 项目地址: https://gitcode.com/gh_mirrors/pe/PersistentWindows 多显示器用户和远…...
Phi-4-mini-reasoning企业落地:金融风控规则推理+合规性自动校验
Phi-4-mini-reasoning企业落地:金融风控规则推理合规性自动校验 1. 模型概述与金融场景价值 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型,专为数学推理、逻辑推导和多步解题等强逻辑任务设计。在金融领域,这个"小参数、强…...
cool-admin(midway版)后端日志管理:日志聚合与集中式存储终极指南
cool-admin(midway版)后端日志管理:日志聚合与集中式存储终极指南 【免费下载链接】cool-admin-midway 🔥 cool-admin(midway版)一个很酷的后台权限管理框架,模块化、插件化、CRUD极速开发,永久开源免费,基于midway.js…...
自动驾驶RL微调实战:如何用MotionLM提升模型可靠性(附Waymo数据集配置)
自动驾驶RL微调实战:如何用MotionLM提升模型可靠性(附Waymo数据集配置) 在自动驾驶技术快速迭代的今天,强化学习(RL)微调已成为提升模型可靠性的关键手段。不同于传统模仿学习(IL)的…...
