WinForm、WPF、ASP.NET窗口生命周期
2017-07-20 16:02
696 查看
做了这么久桌面应用程序开发,对窗口的生命周期还没有一个清晰的了解。那我们就对*WinForm、WPF和ASP.NET*应用程序中窗口的生命周期做一个测试,看一下在窗口的创建和消亡的过程中,各个事件的执行顺序。
在窗口的构造函数中注册一下各个事件。
在事件中执行函数,将事件名称和执行顺序输出。
我们可以看到,输出结果是:
> 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事件被调用。
———-
同样,我们注册一下各个事件。
在各个事件中执行函数,输出事件名称和执行顺序。
输出结果如下:
Initialized: 1
Activated: 2
Loaded: 3
ContentRendered: 4
Activated: 5
Closing: 6
Closed: 7
值得注意的是:Initialized事件必须在构造函数执行InitializeComponent();之前注册,否则不会执行。
PreInit==>Init==>InitComplete==>PreLoad==>Load==>Validation==>LoadComplete==>PreRender==>SaveStateComplete==>Rendering==>UnLoad
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
相关文章推荐
- WPF/Silverlight中的MVVM模式能否在WinForm/ASP.NET上运用?
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- WinForm Vs WPF, COM/COM+ Vs .Net Assembly, COM/COM+ in ASP.Net, ... ...
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- WPF/Silverlight中的MVVM模式能否在WinForm/ASP.NET上运用?
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- 在Winform,Silvelight,WPF等程序中访问Asp.net MVC web api
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- WPF/Silverlight中的MVVM模式能否在WinForm/ASP.NET上运用?
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- WPF/Silverlight中的MVVM模式能否在WinForm/ASP.NET上运用?
- WPF/Silverlight中的MVVM模式能否在WinForm/ASP.NET上运用?
- 清新空气---我的.net(C#)生涯知识总结 跨CSS,JS,JAVA,AJAX,WPF,WCF,LINQ,ASP.NET,Winform,Sqlserver,Mysql,EF,OOP,开发工具等
- WPF/Silverlight中的MVVM模式能否在WinForm/ASP.NET上运用?
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- 在asp.net项目中使用winform窗口
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- ASP.NET应用程序与页面生命周期
- asp.net页面的生命周期