zoukankan      html  css  js  c++  java
  • WPF系列学习

    1:WPF最小化到系统托盘

    2:WPF程序单例运行

    3:WPF中三种异常捕获:UI线程异常、非UI线程异常、Task线程异常

           在窗体放一个按钮在单击事件执行如下代码来模拟。

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                //throw new InvalidOperationException("Something has gone wrong.");
    
                Thread t = new Thread(() => { throw new InvalidOperationException("Something has gone wrong."); });
                t.IsBackground = true;
                t.Start();
    
                //Task.Factory.StartNew(() => { throw new Exception("出错了"); });
            }

    三种解决方案:

            private void App_Startup(object sender, StartupEventArgs e)
            {
                //处理UI线程异常
                DispatcherUnhandledException += App_DispatcherUnhandledException;
                //处理非UI线程异常
                AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
                //Task线程内异常
                TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
            }
            /// <summary>
            /// 捕获到UI线程异常
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
            {
                log.Exception("捕获到UI线程异常", e.Exception);
                
                e.Handled = true;//表示此异常已处理过
            }
            /// <summary>
            /// 捕获到非UI线程异常
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                if (e.IsTerminating)
                {
                    log.Error(string.Format("捕获到非UI线程异常,并发生致命错误,导致程序即将终止,请联系运营商!{0}", e.ExceptionObject.ToString()));
                    MessageBox.Show("发生致命错误,导致程序即将终止,请联系运营商!");
                }
                else
                {
                    log.Error(string.Format("捕获到非UI线程异常 {0}", e.ExceptionObject.ToString()));
                }
            }
            /// <summary>
            /// 捕获到Task线程内异常
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
            {
                log.Exception("捕获到Task线程内异常", e.Exception);
                e.SetObserved();//设置该异常已察觉(这样处理后就不会引起程序崩溃)
            }

     4:DataGrid 分页

  • 相关阅读:
    WPF DataGrid ListView等控件Binding LINQ数据源
    WPF自定义命令
    vb.net与FLASH的完美结合
    [音乐欣赏]鲍家街43号 汪峰 小鸟
    MSGRID的填充
    听!是谁在唱歌
    学习用的几个英文单词
    [学习日记]三层结构
    有关从文件完整路径中提取文件名的方法
    有关TABCONTROL选项卡的动态选择方法
  • 原文地址:https://www.cnblogs.com/wgx0428/p/10263171.html
Copyright © 2011-2022 走看看