WPF中未捕获异常之处理

2024-03-28 02:48
文章标签 异常 处理 捕获 wpf 中未

本文主要是介绍WPF中未捕获异常之处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原帖地址:http://blog.csdn.net/luminji/article/details/5395595

异常有两类,一类是主线程异常,另一类是工作线程异常。

 

一:主线程的未捕获异常处理起来比较简单

1:首先在APP.XAML中定义一个DispatcherUnhandledException事件,如

[xhtml] view plain copy
  1. <Application x:Class="CET.ExamViewer.App"  
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  4.     StartupUri="WinMain.xaml"  
  5.     DispatcherUnhandledException="App_DispatcherUnhandledException" >  
  6.     <Application.Resources>  
  7.            
  8.     </Application.Resources>  
  9. </Application>  

 

2:其次,事件函数可以如下:

[c-sharp] view plain copy
  1. void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)  
  2.         {  
  3.             StringBuilder stringBuilder = new StringBuilder();  
  4.             stringBuilder.AppendFormat("应用程序出现了未捕获的异常,{0}/n", e.Exception.Message);  
  5.             if (e.Exception.InnerException != null)  
  6.             {  
  7.                 stringBuilder.AppendFormat("/n {0}", e.Exception.InnerException.Message);  
  8.             }  
  9.             stringBuilder.AppendFormat("/n {0}", e.Exception.StackTrace);  
  10.             MessageBox.Show(stringBuilder.ToString());  
  11.             e.Handled = true;  
  12.         }  

 

 

二:工作线程异常的捕获

      对于工作线程的未捕获异常,也就是你主线程中,新起了一个线程,然后这个线程抛出的异常。如果你不做特殊处理,则光靠DispatcherUnhandledException是捕获不了的。

      所以,我们就要对工作线程的异常进行重新包装。事实上,也就是用到了WPF中的主线程的Dispatcher。如下代码:

[c-sharp] view plain copy
  1. public void 工作函数()  
  2.         {  
  3.             try  
  4.             {  
  5.                 some code may be throw new Exception("我是工作线程的异常信息");                  
  6.             }  
  7.             catch (Exception ex)  
  8.             {  
  9.                 PageMain.GetInstance().Dispatcher.Invoke((MethodInvoker)delegate  
  10.                     {  
  11.                         throw ex;  
  12.                     });  
  13.             }  
  14.         }  

      注意,上面代码中的PageMain.GetInstance().Dispatcher,就是获取主线程(也即主页面的)的Dispatcher。PageMain.GetInstance()就是主页面的一个单例,想必大家都已经很清楚如何实现了。

这篇关于WPF中未捕获异常之处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/854222

相关文章

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要

Python中异常类型ValueError使用方法与场景

《Python中异常类型ValueError使用方法与场景》:本文主要介绍Python中的ValueError异常类型,它在处理不合适的值时抛出,并提供如何有效使用ValueError的建议,文中... 目录前言什么是 ValueError?什么时候会用到 ValueError?场景 1: 转换数据类型场景

Spring中Bean有关NullPointerException异常的原因分析

《Spring中Bean有关NullPointerException异常的原因分析》在Spring中使用@Autowired注解注入的bean不能在静态上下文中访问,否则会导致NullPointerE... 目录Spring中Bean有关NullPointerException异常的原因问题描述解决方案总结

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用