1、创建Application对象

  • 新建WPF程序后,排除掉WPF自动创建的App.xaml,我们自定义一个类,在该类的Main()方法中,创建Application对象,然后调用创建一个窗口对象,最后在Run()方法中,传递这个窗口对象。便完成了一个简单的应用程序的启动。
class AppStart
{
[STAThread]
public static void Main()
{
Application application = new Application();
MainWindow mainWindow = new MainWindow();
application.Run(mainWindow);
}
}
  • 当Run()方法中传递一个窗口时,该窗口就被设置为主窗口。我们可以通过Application.MainWidow属性获取到主窗口。
  • 调用Run()方法后会触发Application.Startup事件并显示主窗口。
  • 当然还有另一种方式启动应用程序:
[STAThread]
public static void Main()
{
Application application = new Application();
MainWindow mainWindow = new MainWindow();
application.MainWindow = mainWindow;
application.Run();
}

2、自定义派生自Application的类

WPF自动会为我们创建一个App.xaml文件,<Applicatin>标签中的Class属性值会为我们创建一个派生自所在标签类型(Application)的类。并且这个类也应该是由两个不可见的partial类型组成。

从反编译结果可以看出自动生成的部分类中带有程序入口方法的Main()。所以该类的结构大致就是:

[STAThread()]
static void Main()
{
App app = new App();
app.InitializeComponent();
app.Run();
} public void InitializeComponent()
{
this.StartupUri = new Uri("MainWindow.xaml",System.UriKind.Relative);
}

而第二部分存储在项目的App.xaml.cs类似的文件中。这一部分由我们自己来添加代码:

public partial class App : Application
{
//添加你的实现
}

3、应用程序的关闭方式

通常只要还有一个窗口没有关闭,Application类就还处于有效状态。

  • 可以通过调整Application.ShutdownMode属性来设置应用程序关闭模式。
  • 如果Application是手动实例化的,则需要在Run()方法调用前设置ShutdownMode属性。

  • 无论使用那种关闭模式,只要调用Application.Shutdown()方法,Application.Run()方法会立即返回,进而终止应用程序。Run()方法返回后,仍然可以在Main()里面处理其它代码或者在Exit事件中处理未完的事情。

4、应用程序事件

虽然,新建的App.xaml.cs中没有任何代码,但是我们仍然可以在其中添加一些代码来响应应用程序事件。下面贴出来一串代码来帮助理解Application类里面的事件。

/// <summary>
/// Application.Run()之后,主窗口显示前发生。
/// </summary>
/// <param name="e"></param>
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
//SplashScreen splashScreen = new SplashScreen("welcome.png");
//splashScreen.Show(false);
//Thread.Sleep(1500);
//splashScreen.Close(new TimeSpan(5000000));
}
/// <summary>
/// 发生在应用程序关闭时,并在Run()方法返回前发生。这是不能取消的关闭。
/// </summary>
/// <param name="e"></param>
protected override void OnExit(ExitEventArgs e)
{
base.OnExit(e);
}
/// <summary>
/// 当程序从后台切换到前台时发生
/// </summary>
/// <param name="e"></param>
protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
}
/// <summary>
/// 当应用程序切换到其它Windows程序时发生
/// </summary>
/// <param name="e"></param>
protected override void OnDeactivated(EventArgs e)
{
base.OnDeactivated(e);
}
/// <summary>
///
/// </summary>
/// <param name="e"></param>
protected override void OnSessionEnding(SessionEndingCancelEventArgs e)
{
base.OnSessionEnding(e);
}

Application类-应用程序生命周期的更多相关文章

  1. iOS Application Life Cycle 应用程序生命周期

    应用程序的状态 IOS的应用程序一共有5种状态. Not running(未运行):程序未启动 Inactive(未激活):其他两个状态切换时出现的短暂状态.唯一在此状态停留时间比较长的情况是:当用户 ...

  2. 【iOS开发-72】设置状态栏的两种方式、程序生命周期以及更好地理解几大类(对象)之间的关系

    (1)设置状态栏的2种方式 --第一种方式就是我们在控制器中设置,系统默认就是交给视图控制器去管理的,这样不同视图控制器能够自己定义不同的状态栏例如以下: -(BOOL)prefersStatusBa ...

  3. asp.net应用程序生命周期和asp.net网页的生命周期

    一.asp.net应用程序生命周期 asp.net应用程序生命周期以浏览器向web服务器(比如IIS服务器)发送请求为起点,先后经历web服务器下的ISAPI(Internet Server Appl ...

  4. asp.net应用程序生命周期

    asp.net应用程序生命周期(流程文字描述版) 请求——>IIS——>ISAPI映射——>交给asp.net(即为IIS的扩展)——>通知Application类创建一个应用 ...

  5. .net学习笔记----Asp.net的生命周期之一应用程序生命周期

    Http请求刚刚到达服务器的时候 当服务器接收到一个 Http请求的时候,IIS (Internet Information Services,互联网信息服务)首先需要决定如何去处理这个请求. 什么是 ...

  6. (转)iOS应用程序生命周期(前后台切换,应用的各种状态)详解

    原文:http://blog.csdn.net/totogo2010/article/details/8048652 iOS应用程序生命周期(前后台切换,应用的各种状态)详解         分类:  ...

  7. IOS应用程序生命周期&启动周期函数

    —程序的生命周期         a.程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程         b.每一个IOS应用程序都包含一个UIApplication对象,IOS系统通过该U ...

  8. [译]MVC应用程序生命周期

    原文:MVC Application Lifecycle 来一探究竟在MVC应用程序中参与请求处理的各个不同组件. 目录: 序言 背景 UrlRoutingModule RouteHandler Mv ...

  9. 转:iOS应用程序生命周期(前后台切换,应用的各种状态)详解

    iOS应用程序生命周期(前后台切换,应用的各种状态)详解 分类: iOS开发进阶2012-10-08 15:35 42691人阅读 评论(30) 收藏 举报 iosapplication任务anima ...

随机推荐

  1. Android View篇之自定义验证码输入框

    首先,我们来看看实现的是怎么样的效果: 如果我们拿到这样的UI,想到的布局应该是用4个EditText包在横向的LinearLayout里面,但今天要讲的View,所以我们决定用一个自定义的EditT ...

  2. 去除数组空格 php

    public function trimArray($params){ if (!is_array($params)) return trim($params); return array_map([ ...

  3. 初识v4l2(四)-------v4l2_open、v4l2_read、v4l2_write浅析

    原文:https://blog.csdn.net/leesagacious/article/details/49995729 1.app:     open("/dev/video0&quo ...

  4. Shiro密码加密

    Shiro密码加密 相关类 org.apache.shiro.authc.credential.CredentialsMatcher org.apache.shiro.authc.credential ...

  5. zz斯坦福Jure Leskovec图表示学习:无监督和有监督方法

    斯坦福Jure Leskovec图表示学习:无监督和有监督方法(附PPT下载) 2017 年 12 月 18 日  专知 专知内容组(编) 不要讲得太清楚 [导读]现实生活中的很多关系都是通过图的形式 ...

  6. LG5367 「模板」康托展开 康托展开

    问题描述 LG5367 题解 康托展开公式: \[ans=1+(\sum_{i=1}^{n}{a_i})\times(n-i)!\] 用树状数组维护一下\(\sum\)里面的东西,前缀积维护后面的东西 ...

  7. tuned linux 性能调优工具

    tuned 是redhat 提供的一套系统调优工具,使用简单,同时也提供了比较全的分类. 参考资料 https://github.com/redhat-performance/tuned

  8. CSP考前复习

    前言 因为loceaner太菜了,他什么东西都不会 所以他打算学一个东西就记录一下 不过因为他很菜,所以他不会写原理-- 而且,他希望在2019CSP之前不会断更 就酱紫,就是写给他自己的--因为他太 ...

  9. quartz Cron表达式生成详解

    简介 Cron作为一个Unix工具,已经存在很长一段时间了,用于实现任务调度的功能.CronTrigger类基于Cron而来. CronTrigger CronTriggers往往比SimpleTri ...

  10. 【08月07日】A股滚动市盈率PE最低排名

    ​仅根据最新的市盈率计算公式进行排名,无法对未来的业绩做出预测. 方大集团(SZ000055) - 滚动市盈率PE:2.32 - 滚动市净率PB:1.04 - 滚动年化股息收益率:4.37% - 建筑 ...