您的位置:首页 > 编程语言 > ASP

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

2017-07-20 16:02 696 查看
做了这么久桌面应用程序开发,对窗口的生命周期还没有一个清晰的了解。那我们就对*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: 1
BindingContextChanged: 2
Load: 3
VisibleChanged: 4
Activated: 5
Shown: 6

Deactivate: 7
Activated: 8
Deactivate: 9
Activated: 10
FormClosing: 11
FormClosed: 12
Deactivate: 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窗口。





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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐