何完美的应用程序和技术高明的程序员,都不可能是绝对不出差错的。与其追求完美无错的代码,还不如将程序中可能预知的异常在发布前进行很好的处理,可能是最有价值的。那么,C#是如何处理异常的呢?首先,我们从最普通的异常说起:
使用try-catch-finally块捕获异常,基本格式如下:
代码如下 | 复制代码 |
|
ASP.NET异常处理
除了以上的try-catch-finally的处理方式外,还有三种方式来捕获异常:
1. 页面级错误处理(通过Page_Error事件)
代码如下 | 复制代码 |
protected void Page_Error(object sender, EventArgs e) { string errorMsg = String.Empty; Exception currentError = Server.GetLastError(); errorMsg += "系统发生错误: "; errorMsg += "错误地址:" + Request.Url + " "; errorMsg += "错误信息:" + currentError.Message + " "; Response.Write(errorMsg); Server.ClearError();//清除异常(否则将引发全局的Application_Error事件) } |
2. 应用程序级(global.asax)错误处理(通过Application_Error事件)
代码如下 | 复制代码 |
protected void Application_Error(object sender, EventArgs e) { Exception ex = Server.GetLastError(); Exception iex = ex.InnerException; string errorMsg = String.Empty; string particular = String.Empty; if (iex != null) { errorMsg = iex.Message; particular = iex.StackTrace; } else { errorMsg = ex.Message; particular = ex.StackTrace; } //AddLog(errorMsg, particular); Server.ClearError();//处理完及时清理异常 } |
3. 应用程序配置(web.config)
代码如下 | 复制代码 |
WinForm应用程序异常处理
在WinForm的应用程序中,除了采用try-catch-finally的方式外,如何实现全局的异常处理呢?因为不具有Application_Error事件,但可以通过委托的方式来实现。
代码如下 | 复制代码 |
internal class ThreadExceptionHandler { //实现错误异常事件 public void Application_ThreadException(object sender, ThreadExceptionEventArgs e) { try { //如果用户单击"Abort"则退出应用程序 DialogResult result = ShowThreadExceptionDialog(e.Exception); if (result == DialogResult.Abort) { Application.Exit(); } } catch { try { MessageBox.Show("严重错误", "严重错误", MessageBoxButtons.OK, MessageBoxIcon.Stop); } finally { Application.Exit(); } } } private DialogResult ShowThreadExceptionDialog(Exception e) { string errorMsg = "错误信息:tt" + e.Message + "tt" + e.GetType() + "tt" + e.StackTrace; return MessageBox.Show(errorMsg, "Application Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop); } } static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { ThreadExceptionHandler handler = new ThreadExceptionHandler(); Application.ThreadException += new ThreadExceptionEventHandler(handler.Application_ThreadException); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new frmEvent()); } } public partial class frmEvent : Form { private void btnException_Click(object sender, EventArgs e) { throw new InvalidOperationException("无效的操作异常!"); } } |
暗影猎手失落的世界 最新版本v30.118.6.0
下载格里姆瓦勒完全版 安卓版v1.2.0
下载忍者武士暗影格斗无限金币版 安卓版v1.82.1
下载忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载创造与魔法免登录版 手机版v1.0.0760
创造与魔法是一款高度自由的沙盒冒险手游,该游戏采用了3D最新
创造与魔法gm版 安卓版v1.0.0760
创造与魔法是一款有英雄互娱运营的一款经营沙盒建造手游,该游戏
创造与魔法变态无敌版 v1.0.0760
创造与魔法是一款3DQ版的沙盒模拟建造手游,在这里玩家需要适
腾讯普通话小镇游戏 安卓版v2.2.5
普通话小镇是由腾讯游戏追梦计划推出发行的模拟经营类型普通学习
海岛村 最新版v1.0
海岛村是一款非常好玩的模拟经营类手游,玩家在游戏中将会有一个