[WPF]第一天基础介绍
2017-12-15 09:18
519 查看
一:App环境承载
我们都知道,console和winform程序的入口函数都是main,wpf同样也不例外,好了,我们新建一个wpf的程序,vs自动给我们生成了一个
MainWindow.xaml和App.xaml文件
微软官方说wpf程序是从Application开始的,既然是开始总有个入口点吧,奇怪的是我们并没有发现Main函数,程序又是如何Run起来的呢?
Application中是空白的,找了一会发现App.xaml中通过这样的方式启动
StartupUri=”MainWindow.xaml”
二:Wpf中Application的生命周期
我们知道webform中的Global文件定义了一个应用程序的全局生命周期,或许有人问,生命周期能够干些什么,其实干的事情可多着呢,
比如我们可以做一些身份验证,或者一些信息的初始化,那么wpf中到底有哪些对应的方法和事件呢?
1:OnStartup方法 => Startup 事件
这个就见名识意了,也就是上面一幅图中的app.Run()的时候触发。
2: OnSessionEnding方法 => SessionEnding 事件
系统关机前调用。
3:OnExit方法 => Exit事件
应用程序关闭前调用。
4:OnActivated方法 => Activated 事件
应用程序获得焦点的时候触发。
5:OnDeactivated方法 => DeActivated事件
应用程序失去焦点的时候触发。
三:全局异常获取
在webform中的Global文件中有一个Application_Error方法,专门用来捕获整个应用程序的异常,以至于不会出现“黄白页”给用户,以此来提高
系统的健壮性和安全性,那么wpf中也有类似的方法吗?当然,wpf跟webform神似,他有的我也有,这里是一个DispatcherUnhandledException
事件,然后我们在OnStartup注册一下就Ok了。
测试:
先我们拖一个button,事件处理中故意抛出异常。
然后我们在Application_Error中进行处理,当然实际应用中应该是记一些log日志。
我们都知道,console和winform程序的入口函数都是main,wpf同样也不例外,好了,我们新建一个wpf的程序,vs自动给我们生成了一个
MainWindow.xaml和App.xaml文件
微软官方说wpf程序是从Application开始的,既然是开始总有个入口点吧,奇怪的是我们并没有发现Main函数,程序又是如何Run起来的呢?
Application中是空白的,找了一会发现App.xaml中通过这样的方式启动
StartupUri=”MainWindow.xaml”
二:Wpf中Application的生命周期
我们知道webform中的Global文件定义了一个应用程序的全局生命周期,或许有人问,生命周期能够干些什么,其实干的事情可多着呢,
比如我们可以做一些身份验证,或者一些信息的初始化,那么wpf中到底有哪些对应的方法和事件呢?
1:OnStartup方法 => Startup 事件
这个就见名识意了,也就是上面一幅图中的app.Run()的时候触发。
2: OnSessionEnding方法 => SessionEnding 事件
系统关机前调用。
3:OnExit方法 => Exit事件
应用程序关闭前调用。
4:OnActivated方法 => Activated 事件
应用程序获得焦点的时候触发。
5:OnDeactivated方法 => DeActivated事件
应用程序失去焦点的时候触发。
/// <summary> /// App.xaml 的交互逻辑 /// </summary> public partial class App : Application { protected override void OnActivated(EventArgs e) { base.OnActivated(e); //TODO your code } protected override void OnDeactivated(EventArgs e) { base.OnDeactivated(e); //TODO your code } protected override void OnExit(ExitEventArgs e) { base.OnExit(e); //TODO your code } protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); //TODO your code } protected override void OnSessionEnding(SessionEndingCancelEventArgs e) { base.OnSessionEnding(e); //TODO your code } }
三:全局异常获取
在webform中的Global文件中有一个Application_Error方法,专门用来捕获整个应用程序的异常,以至于不会出现“黄白页”给用户,以此来提高
系统的健壮性和安全性,那么wpf中也有类似的方法吗?当然,wpf跟webform神似,他有的我也有,这里是一个DispatcherUnhandledException
事件,然后我们在OnStartup注册一下就Ok了。
/// <summary> /// App.xaml 的交互逻辑 /// </summary> public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); //注册Application_Error this.DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException); } //异常处理逻辑 void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { //处理完后,我们需要将Handler=true表示已此异常已处理过 e.Handled = true; } }
测试:
先我们拖一个button,事件处理中故意抛出异常。
private void Button_Click(object sender, RoutedEventArgs e) { throw new Exception("哥,我抛异常了,救我!"); }
然后我们在Application_Error中进行处理,当然实际应用中应该是记一些log日志。
//异常处理逻辑 void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { //处理完后,我们需要将Handler=true表示已此异常已处理过 MessageBox.Show("全局异常:" + e.Exception.Message); e.Handled = true; }
相关文章推荐
- 8天入门wpf—— 第一天 基础概念介绍
- 8天入门wpf—— 第一天 基础概念介绍
- 8天入门wpf—— 第一天 基础概念介绍
- 8天入门wpf—— 第一天 基础概念介绍
- 【转载】8天入门wpf—— 第一天 基础概念介绍
- 8天入门wpf—— 第一天 基础概念介绍
- WPF Step By Step -基础知识介绍
- WPF Step By Step -基础知识介绍
- WPF Step By Step -基础知识介绍
- WPF基础学习第一天
- WPF-基础知识介绍
- WPF Step By Step -基础知识介绍
- WPF基础介绍
- WPF - 基础介绍
- WPF Step By Step -基础知识介绍
- 0712c#第一天C#语言基础介绍与语法入门
- WPF基础到企业应用系列8——依赖属性之“风云再起”
- java基础之String类的介绍
- RabbitMQ基础概念详细介绍
- 深入浅出node.js游戏服务器开发1——基础架构与框架介绍