当前位置: 首页 > news >正文

WinForm程序中未处理异常的解决方法(转)

在这里我们将讨论的是WinForm程序中未处理异常的解决方法,51CTO向您推荐《WinForm应用与开发教程》,希望能对您了解WinForm有所帮助。

//--tip

 

  • 详解.NET 2.0开发Winform程序经验
  • WinForm程序中使用控制台作为输出窗口
  • 使用Windows PowerShell创建WinForm程序
  • 利用WCF的Duplex服务向Winform程序推送..
  • 详解C#的WinForm增加treeView1控件

//----

 

如果Windows Forms程序中有未被捕获的异常,会导致程序崩溃并且给用户造成不良的印象。例如下面的程序,模拟了一个未捕获的异常:

错误提示 

按钮事件为:


 
  1. private void button1_Click(object sender, EventArgs e){  
  2.         throw new Exception();  

点击Exception 按钮,会弹出如下默认窗口

错误窗口

Windows Forms提供了两个事件来处理未捕获的异常发生时的情况,分别是 Application.ThreadException和AppDomain.UnhandledException事件,前者用来处理UI线程中的异常,后者处理其他线程中的异常。要使程序使用自定义的事件来处理异常,可以使用如下代码:


 
  1. static class Program  
  2.     {  
  3.         /// <summary>  
  4.         /// The main entry point for the application.  
  5.         /// </summary>  
  6.         [STAThread]  
  7.         static void Main()  
  8.         {  
  9.  Application.ThreadException += 
  10. new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);  
  11.  AppDomain.CurrentDomain.UnhandledException += 
  12. new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);  
  13.               
  14.             Application.EnableVisualStyles();  
  15.             Application.SetCompatibleTextRenderingDefault(false);  
  16.             Application.Run(new Form1());  
  17.         }          
  18.  
  19. static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)  
  20.         {  
  21.             MessageBox.Show("抱歉,您的操作没有能够完成,请再试一次或者联系软件提供商");  
  22.             LogUnhandledException(e.ExceptionObject);  
  23.         }  
  24.  
  25. static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)  
  26.         {  
  27.             MessageBox.Show("抱歉,您的操作没有能够完成,请再试一次或者联系软件提供商");  
  28.             LogUnhandledException(e.Exception);  
  29.         }  
  30.  
  31.         static void LogUnhandledException(object exceptionobj)  
  32.         {  
  33.             //Log the exception here or report it to developer  
  34.         }  
  35.     } 

此时运行该程序的结果如下:

运行结果

相关文章:

  • ORACLE10G DATAGUARD配置笔记
  • 动态生成内表
  • C# params ref out 使用小结
  • 30天敏捷结果(13):如何对事情付诸行动
  • 把我的悲伤留给自己(Zz)
  • NetBeans IDE 6.9 第二个补丁版发布
  • 两本路由器新书在各大书店隆重闪亮登场啦
  • 如何下载Chrome离线安装包 MSI系统级安装包
  • 写了个小软件《这货不是猩猩》
  • 程序员的5年前与5年后,写在2010年的感恩节
  • Redis小尝试
  • IPSec ×××SSL ×××
  • 快速定位 摆脱运维所累
  • [书目20101209]《中国式团队》 曾仕强
  • 异常“企图释放并非呼叫方所拥有的多用户终端运行程序”的处理
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • CentOS6 编译安装 redis-3.2.3
  • crontab执行失败的多种原因
  • Java 23种设计模式 之单例模式 7种实现方式
  • java取消线程实例
  • leetcode-27. Remove Element
  • Linux gpio口使用方法
  • Mysql5.6主从复制
  • Wamp集成环境 添加PHP的新版本
  • WePY 在小程序性能调优上做出的探究
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 说说动画卡顿的解决方案
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 王永庆:技术创新改变教育未来
  • 移动端 h5开发相关内容总结(三)
  • 在Unity中实现一个简单的消息管理器
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # 数论-逆元
  • #Java第九次作业--输入输出流和文件操作
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (70min)字节暑假实习二面(已挂)
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)字符分类函数
  • (day 12)JavaScript学习笔记(数组3)
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .Net的C#语言取月份数值对应的MonthName值
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • /*在DataTable中更新、删除数据*/
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [BZOJ1060][ZJOI2007]时态同步 树形dp