Application类-应用程序生命周期

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);
}

转载于:https://www.cnblogs.com/bigbosscyb/p/11325495.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值