WinForm、WPF、ASP.NET窗口生命周期

来源:互联网 发布:淘宝白底图片制作 编辑:程序博客网 时间:2024/06/05 07:36

做了这么久桌面应用程序开发,对窗口的生命周期还没有一个清晰的了解。那我们就对*WinForm、WPF和ASP.NET*应用程序中窗口的生命周期做一个测试,看一下在窗口的创建和消亡的过程中,各个事件的执行顺序。

  • WinForm

    首先,我们来看一下WinForm窗口。在窗口的构造函数中注册一下各个事件。
this.HandleCreated += Form1_HandleCreated;this.BindingContextChanged +=Form1_BindingContextChanged;this.Load += Form1_Load;this.VisibleChanged += Form1_VisibleChanged;this.Activated += Form1_Activated;this.Deactivate += Form1_Deactivate;this.Shown += Form1_Shown;this.FormClosing += Form1_FormClosing;            this.FormClosed += Form1_FormClosed;            this.Deactivate += Form1_Deactivate;
在事件中执行函数,将事件名称和执行顺序输出。
private void Output(string func){   System.Diagnostics.Debug.WriteLine($"{func}: {i++}");}
我们可以看到,输出结果是:> HandleCreated: 1BindingContextChanged: 2Load: 3VisibleChanged: 4Activated: 5Shown: 6Deactivate: 7Activated: 8Deactivate: 9Activated: 10FormClosing: 11FormClosed: 12Deactivate: 13当窗口失去焦点时,Deactivate事件被调用;获得焦点时,Activated事件被调用。———-
  • WPF

    接下来,看一下WPF窗口。同样,我们注册一下各个事件。
  • this.Initialized += MainWindow_Initialized;this.Activated += MainWindow_Activated;this.Loaded += MainWindow_Loaded;this.ContentRendered += MainWindow_ContentRendered;this.Closing += MainWindow_Closing;this.Unloaded += MainWindow_Unloaded;this.Closed += MainWindow_Closed;

    在各个事件中执行函数,输出事件名称和执行顺序。
    输出结果如下:

    Initialized: 1
    Activated: 2
    Loaded: 3
    ContentRendered: 4
    Activated: 5
    Closing: 6
    Closed: 7

    值得注意的是:Initialized事件必须在构造函数执行InitializeComponent();之前注册,否则不会执行。

  • ASP.NET

    最后是ASP.NET窗口。

    ASP.NET page life cycle


    PreInit==>Init==>InitComplete==>PreLoad==>Load==>Validation==>LoadComplete==>PreRender==>SaveStateComplete==>Rendering==>UnLoad

    原创粉丝点击