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系列学习的更多相关文章

  1. WPF 系列学习

    WPF CheckBox 自定义样式 给Button设置ToolTip 圆角Button 样式

  2. WPF系列学习之三(路由事件)

    路由事件实际上以一上 列三种方式出现.    1.与普通的.net事件类似的直接路由事件.它们起源于一个元素,并且不传递给其他元素.例如:MouseEnter事件.    2.在包含层次中向上传递的冒 ...

  3. WPF学习01:初始XAML浅析

    本文内容: 浅析WPF应用默认创建的XAML中元素.attributes. 新建WPF工程“HelloWPF”. 初始创建的主窗体XAML代码如下: <Window x:Class=" ...

  4. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  5. MVVM框架从WPF移植到UWP遇到的问题和解决方法

    MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...

  6. MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息

    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...

  7. MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信

    MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...

  8. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  9. MVVM模式解析和在WPF中的实现(三)命令绑定

    MVVM模式解析和在WPF中的实现(三) 命令绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

随机推荐

  1. tflearn weights获取与存储

    参考: http://tflearn.org/examples/

  2. mac上不了网

    不知怎么回事勾选了socks代理导致ping的通但打不开网页软件登不了

  3. unity 实现调用Windows窗口/对话框交互

    Unity调用Window窗口 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...

  4. UGUI中Event Trigger的基本用法

    UGUI中Event Trigger的基本用法 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chin ...

  5. PS学习之制作音乐视屏

    素材: 新建画布 插入图片素材 调整和画布一样大小 喜欢彩色的 可以加照片滤镜 喜欢黑白的可以加黑白滤镜 也可以添加自己喜欢的文字 在窗口中选择时间轴 创建视屏时间轴 图中标记得就是每秒能播放30张 ...

  6. random(随机模块)

    程序中有很多地方需要用到随机字符,比如登录网站的随机验证码,通过random模块可以很容易生成随机字符串 >>> random.randrange(1,10) #返回1-10之间的一 ...

  7. 踩坑tomcat8.5的cookie机制

    https://www.pomelolee.com/1601.html tomcat升级到8.5版本 发现登录和退出报错,报错日志为下 [http-nio-8080-exec-20] 2016 Aug ...

  8. Tag文件的创建与应用

    Tag文件,几乎和JSP文件一模一样,可以被JSP页面动态加载调用.Tag文件有什么优势呢(既然和JSP几乎一模一样,那就得想想这个必然有不一样的地方,不然要它存在干嘛) 在设计Web应用时,可以通过 ...

  9. test20190331

    贪吃蛇(snaker.cpp/.in.out 1S 512M) [题目描述] C 最近爱上了玩贪吃蛇,想要自己制作一款贪吃蛇游戏,但是她太弱了,只会写一个一维的程序. 游戏界面可以看做一条长为 n 的 ...

  10. tomcat部署项目(war文件)

    首先配置jdk环境 下载jdk 例如,我将jdk安装在d盘jdk目录下 配置系统环境 新建系统变量JAVA_HOME值为D:\jdk 新建系统变量CLASS_HOME值为 .%JAVA_HOME%\l ...