很多人认为关闭应用程序应该很简单,例如WindowsForm里一个Application.Exit();方法就可以解决问题,但在WPF里面可别滥用,因为WPF里Application类没有该方法,倒是有一个Exit的事件驱动,在WPF应用程序里面关闭程序讲究很多:

在WPF应用程序的关闭是有ShutdownMode属性设置,具有3中枚举类型的值:

1)OnLastWindowClose 应用程序最后一个窗体关闭时关闭应用程序

2)OnMainWindowClose 应用程序主窗体关闭时关闭应用程序

3)OnExplicitShutdown   显示调用关闭

在OnExplicitShutdown模式下必须显示调用Application实例的ShutDown方法

例如:Application.Current.Shutdown(-1);这里Application.Current返回当前应用程序的当前Application实例。

注意以上不适应XBAP,XBAP在浏览器关闭时自动关闭。

需求:需要在许多子窗体中关闭整个程序(WPF)

winform实现:Application.Exit();

WPF实现:

App.xaml文件:


代码

   <Application x:Class="pc.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="Windows1.xaml" ShutdownMode="OnExplicitShutdown">    Windows1.xaml文件(部分):     <Button Margin="37,0,15,15" Style="{DynamicResource btn_Exit}" Content="Button" Grid.Column="2" Grid.Row="3" Height="41" VerticalAlignment="Bottom" Width="100" x:Name="btn_Exits" Click="btn_Exits_Click" />    Windows1.xaml.cs文件(部分):      private void btn_Exits_Click(object sender, RoutedEventArgs e)
        {
            Application.Current.Shutdown();
            
        }

十分简单!此后只需在按钮事件中加入Application.Current.Shutdown(),即可退出程序

另外,还有一种强制终止应用程序进程的方法

Environment.Exit(0)可以立即中断程序执行并退出

这个方法用起来的感觉类似在任务管理器里找到进程并终止,即立刻关闭进程,不管该进程目前有没有工作,在做什么工作。

在WPF中调用该方法即立即退出,不会等待当前工作完成。

WPF关闭应用程序方法的更多相关文章

  1. android彻底关闭应用程序方法

    Android SDK > 7(Android2.1)之后,即Android2.2及以后版本彻底关闭应用的方法,目前试验只有一下方法有效: Intent startMain = new Inte ...

  2. 关闭应用程序(主程序)(WPF)

    很多人认为关闭应用程序应该很简单,例如WindowsForm里一个Application.Exit();方法就可以解决问题,但在WPF里面可别滥用,因为WPF里Application类没有该方法,倒是 ...

  3. Macbook怎么强制关闭后台程序?Macbook强制关闭后台程序的方法

    有时候我们的Macbook电脑运行某个程序卡在那里耗了很长时间,程序本身有可能提供了取消按钮,点了也没有反应,这时候我们就很想强制关闭它了,那么Macbook怎么强制关闭后台运行的程序呢?下面完美小编 ...

  4. win7或win2008系统中,出现【已停止工作,联机检查解决方案并关闭该程序,关闭程序】解决方法!

    win7或win2008系统中,出现[已停止工作,联机检查解决方案并关闭该程序,关闭程序]解决方法! 经过摸索,点击[控制面板]-[操作中心]-[更改操作中心设置]-[问题报告设置]-[从不检查解决方 ...

  5. MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法

    http://blog.csdn.net/xgx198831/article/details/6713651 MFC对话框程序  屏蔽ESC和ENTER键关闭对话框的方法 或许还有其它更好的办法,但下 ...

  6. "应用程序无法正常启动(0xc000007b)。请单击 确定 关闭应用程序。"解决方法

    完成一小项目,正常运行,测试环境有Windows XP,Win 7,Win X64及有SP的版本,也是我客户端可能用到的系统版本,Win8和Win10未测试 但在分发过程中,发现有的机器可以正常运行, ...

  7. WPF关闭应用汇总

    原文:WPF关闭应用汇总 就本人而言,C#中关闭应用主要有以下途径: 1.Close():关闭当前窗口,可以在OnClosing和 OnClosed中捕获消息,在OnClosing的时候,可以取消关闭 ...

  8. C#-WinForm-跨窗体 构造函数传值 及应用—登录式窗口传值、如何关闭主页面时关闭应用程序、如何打开唯一窗口—★★★★★五星重量级

    构造函数可以传任意类型的值,并可以同时传多个值 结构函数传值的初步应用--简单的登陆式界面 现在我有两个窗体Form3和Form4,如下,如何点击Form3中的按钮后,打开Form4并将Form3中的 ...

  9. WPF入门教程系列(二) 深入剖析WPF Binding的使用方法

    WPF入门教程系列(二) 深入剖析WPF Binding的使用方法 同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProp ...

随机推荐

  1. ASP.NET弹出显示ex.Message异常信息 存在换行符和回车符处理办法。

    1.把ex.Message换成任意字符串,检验在catch语句块中可以用Response.Write方法显示对话框.结果显示成功,说明问题就出在ex.Message上. 2.在程序中下断点,可以看到e ...

  2. 深入剖析 redis 主从复制

    主从概述 redis 支持 master-slave(主从)模式,redis server 可以设置为另一个 redis server 的主机(从机),从机定期从主机拿数据.特殊的,一个 从机同样可以 ...

  3. C#.Net 上传图片,限制图片大小,检查类型完整版

    C#.Net 上传图片,限制图片大小,检查类型完整版 源代码: 处理图片类,如检查图片大小,按宽度比例缩小图片 public class CImageLibrary{   public enum Va ...

  4. “You must not call setTag() on a view Glide is targeting” 解决

    报错原因大致是因为Glide加载的iamgeView调用了setTag()方法导致的错误, 因为Glide已经默认为ImageView设置的Tag. 解决办法:自定义一个Application,在里面 ...

  5. CEF 相关资料

    理解WebKit和Chromium: Content API和CEF3 http://blog.csdn.net/milado_nju/article/details/7455373 如何将Chrom ...

  6. 【python】日志模块

    # -*- coding: utf-8 -*- """ Created on Thu Jul 09 09:36:59 2015 @author: dapenghuang ...

  7. Reflector反编译.NET文件后修复【转】

    反编译后的工程文件用VS2010打开后,在打开窗体时会出现一系列错误提示: 第一种情况: “设计器无法处理第 152 行的代码: base.AutoScaleMode = AutoScaleMode. ...

  8. 使用wireshark抓取wcf生成的soap消息

    在使用wcf的时候想看下生成的soap的格式是怎样的,就想到了抓包. 平时用惯的抓包工具是需要破解,另外有时会不太好用. 于是就想起来用wireshark. 首先遇到几个问题: 1.wireshart ...

  9. 通过Jni实现AES的CBC模式加密解密

    AES加密方式基本实现,出现一个问题就是代码的安全性.我们知道java层代码很容易被反编译,很有可能泄漏我们加密方式与密钥 内容,那我们该怎么办呢?我们可以使用c/c++实现加密,编译成So库的形式, ...

  10. C# 调用 WebService 连接ORACLE 11g

    这几天开发一个WebService遇到很多问题,记录下来顺便帮助一下以后遇到情况的人. 我是通过ADO.NET来连接ORACLE的,也可以用ORACLE提供的ODP.NET. 通过正常的连接后部署II ...