您当前的位置: 首页 > 

[WPF]第一天基础介绍

发布时间:2017-12-15 09:18:57 ,浏览量:0

一: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事件 应用程序失去焦点的时候触发。

////// App.xaml 的交互逻辑
    ///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了。

////// App.xaml 的交互逻辑
    ///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;
        }

这里写图片描述

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    105695博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0485s