1.3 WPF应用程序的启动和终止

表1-1列出了和应用程序生存期相关的事件和方法,通常在相关事件发生时,WPF首先调用Application类中的相应方法,然后再产生相关事件。所以,这些方法常常有相应的事件相对应。例如OnActivated方法和Activated事件、OnDeactivated方法和DeActivated事件,等等。

要考察WPF应用程序的启动和终止过程,有两种方法:其一是从Application类中派生出自己的类,并使用虚函数覆盖技术来观察Application类在运行时调用虚函数的过程;其二是处理Application类中的相关事件。

表1-1 Application类中与应用程序生存期相关的事件

让我们来看看第一种方法:

  using System;
  using System.Collections.Generic;
  using System.Text;
  using System.Windows;
  namespace Yingbao.Chapter1
  {
  public class HelloWPF
  {
      [STAThread]
      public static void Main()
      {
        Window win = new Window();
        win.Title = "WPF application";
        win.Content = "Hello WPF!";
        Application app = new MainApp();
        app.Run(win);
      }
  }
  public class MainApp:Application
  {
      public MainApp()
        : base()
      {
      }
      protected override void OnActivated(EventArgs e)
      {
        Console.WriteLine("OnActivated");
        base.OnActivated(e);
      }
      protected override void OnExit(ExitEventArgs e)
      {
        Console.WriteLine("OnExit");
        base.OnExit(e);
      }
      protected override void OnDeactivated(EventArgs e)
      {
        Console.WriteLine("OnDeactivated");
        base.OnDeactivated(e);
      }
      protected override void OnStartup(StartupEventArgs e)
      {
        Console.WriteLine("OnStartup");
        base.OnStartup(e);
      }
      protected override void
      OnSessionEnding(SessionEndingCancelEventArgs e)
      {
        Console.WriteLine("OnSessionEnding");
        base.OnSessionEnding(e);
      }
  }
  }

这段程序的运行结果如图1-3所示。

图1-3 考察Application中的事件