C#异常如何统一处理 能不能像java那样,做一个Base进行异常处理,然后每个页面都继承Base,不用在每个可能有异常的代码块写try,catch。只要抛异常就可以了? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果是asp.net应用程序在Global.asax中处理,代码如下:<%@ Application Language="C#" %><%@ Import Namespace="System.IO" %><script runat="server"> static System.Timers.Timer timer = null; void Application_Start(object sender, EventArgs e) { } void Application_End(object sender, EventArgs e) { // 在应用程序关闭时运行的代码 } void Application_Error(object sender, EventArgs e) { // 在出现未处理的错误时运行的代码 //注意要用Transfer()方法而不是Redirect()方法,这样保留当前的上下文信息 //以便通过GetLastError方法获取错误信息 //到当前网站根路径下的ShowError.aspx显示异常信息 //Server.Transfer("~/Day11/ShowError.aspx"); } void Session_Start(object sender, EventArgs e) { // 在新会话启动时运行的代码 } void Session_End(object sender, EventArgs e) { // 在会话结束时运行的代码。 // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer // 或 SQLServer,则不会引发该事件。 } protected void Application_AcquireRequestState(object sender, EventArgs e) { }</script> 如果是C#控制台应用程序或者WinForm窗体程序,用AppDomain.UnhandledException 事件 此事件提供未捕获到的异常的通知。此事件使应用程序能在系统默认处理程序向用户报告异常并终止应用程序之前记录有关异常的信息。如果有足够的有关应用程序状态的信息,则可以采取其他措施,如保存程序数据以便于以后进行恢复。建议谨慎行事,因为未处理异常时可能会损坏程序数据。注意: 在 .NET Framework 1.0 和 1.1 版中,引发此事件之前(而不是之后)会向用户报告应用程序终止和调试选项。 此事件可以在任何应用程序域中进行处理。但在发生异常的应用程序域中不一定引发事件。仅当在没有找到合适的异常处理程序的情况下已展开线程的整个堆栈时,才不会处理异常,因此可能引发事件的第一个位置是在生成该线程的应用程序域中。注意: 在 .NET Framework 1.0 和 1.1 版中,此事件只在启动应用程序时由系统创建的默认应用程序域内才会发生。如果应用程序创建其他应用程序域,那么在那些应用程序域中为此事件指定委托无效。 如果在默认应用程序域中处理 UnhandledException 事件,则对于任何线程中任何未处理的异常都会在该应用程序域中引发该事件(无论该线程在哪个应用程序域中启动)。如果该线程在有 UnhandledException 的事件处理程序的应用程序域中启动,则会在该应用程序域中引发该事件。如果该应用程序域不是默认应用程序域,并且默认应用程序域中还有一个事件处理程序,则在这两个应用程序域中都会引发该事件。例如,假设某个线程在应用程序域“AD1”中启动,调用应用程序域“AD2”中的某个方法,并且在这里调用应用程序域“AD3”(在此引发异常)中的某个方法。可以在其中引发 UnhandledException 事件的第一个应用程序域是“AD1”。如果该应用程序域不是默认应用程序域,则在默认应用程序域中也可以引发该事件。在 .NET Framework 1.0 和 1.1 版中,在主应用程序线程以外的线程中发生的未处理异常由运行库捕获,因此不会导致应用程序终止。这样就可能在应用程序不终止的情况下引发 UnhandledException 事件。在 .NET Framework 2.0 版中,这一对子线程中未处理异常的支持已被移除,因为这类静默失败的累积后果(包括性能降低、数据损坏及锁定)会使程序调试很难进行。有关更多信息(包括运行库不会终止情况的列表),请参见托管线程中的异常。若要为此事件注册事件处理程序,必须具有所需权限,否则将引发 SecurityException。有关处理事件的更多信息,请参见使用事件。未处理异常的其他事件对于某些应用程序模型,如果在主应用程序线程中发生未处理的异常,则其他事件可以优先于 UnhandledException。在使用 Windows 窗体的应用程序中,主应用程序线程中的未处理异常会导致引发 Application..::.ThreadException 事件。如果处理此事件,则默认行为是未处理的异常不终止该应用程序(尽管它处于未知状态)。在这种情况下,不会引发 UnhandledException 事件。在挂钩 ThreadException 事件处理程序之前,可以更改此行为,方法是通过使用应用程序配置文件,或者通过使用 Application..::.SetUnhandledExceptionMode 方法将模式更改为 UnhandledExceptionMode..::.ThrowException。这仅适用于主应用程序线程。对于其他线程中引发的未处理异常,将引发 UnhandledException 事件。从 Microsoft Visual Studio 2005 开始,Visual Basic 应用程序框架为主应用程序线程中的未处理异常提供了另一个事件。请参见 WindowsFormsApplicationBase.UnhandledException 事件或 My.Application.UnhandledException 事件。此事件包含一个名称与 AppDomain..::.UnhandledException 所使用的事件实参对象相同的事件实参对象,但属性不同。尤其是,此事件实参对象有一个 ExitApplication 属性,该属性允许应用程序继续运行,忽略未处理的异常(使应用程序处于未知状态)。在这种情况下,不会引发 AppDomain..::.UnhandledException 事件。using System;using System.Security.Permissions;public class Test { [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlAppDomain)] public static void Example() { AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler); try { throw new Exception("1"); } catch (Exception e) { Console.WriteLine("Catch clause caught : " + e.Message); } throw new Exception("2"); // Output: // Catch clause caught : 1 // MyHandler caught : 2 } static void MyHandler(object sender, UnhandledExceptionEventArgs args) { Exception e = (Exception) args.ExceptionObject; Console.WriteLine("MyHandler caught : " + e.Message); } public static void Main() { Example(); }} 看下MSDN把~~里面对异常处理的分类很是详细的 能不能举个简单的例子,比如: protected int Divided(int x,int y) { try { return (int) x / y; } catch(Exception ex) { throw ex; } }上面的代码我不想写try catch,我要继承一个类,统一处理。。怎么写? 编译时出现"指定的加密算法在此平台上不受支持",如何处理 提取源代码内容导入数据库 新手求教 关于应用程序获取外部web页面表格<td>中数据的问题 菜鸟第一帖:问一个C#中关于字体函数FONT的一问题! 关于Request取值问题 C# 开源工作流 介绍本好的C#入门书 请帮我看看为什么我写的WEB SERVICE得不到正确的值? C# 自定义文本控件“文本显示速度”问题(VS2003) 如何计算2个DateTime的差? 我这段代码有错吗?多线程并没有多快啊? 【网站抓取】求思路
<%@ Import Namespace="System.IO" %>
<script runat="server">
static System.Timers.Timer timer = null;
void Application_Start(object sender, EventArgs e)
{
}
void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码 }
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
//注意要用Transfer()方法而不是Redirect()方法,这样保留当前的上下文信息
//以便通过GetLastError方法获取错误信息
//到当前网站根路径下的ShowError.aspx显示异常信息
//Server.Transfer("~/Day11/ShowError.aspx");
} void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码 } void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。 } protected void Application_AcquireRequestState(object sender, EventArgs e)
{ }
</script>
在 .NET Framework 1.0 和 1.1 版中,引发此事件之前(而不是之后)会向用户报告应用程序终止和调试选项。
此事件可以在任何应用程序域中进行处理。但在发生异常的应用程序域中不一定引发事件。仅当在没有找到合适的异常处理程序的情况下已展开线程的整个堆栈时,才不会处理异常,因此可能引发事件的第一个位置是在生成该线程的应用程序域中。注意:
在 .NET Framework 1.0 和 1.1 版中,此事件只在启动应用程序时由系统创建的默认应用程序域内才会发生。如果应用程序创建其他应用程序域,那么在那些应用程序域中为此事件指定委托无效。
如果在默认应用程序域中处理 UnhandledException 事件,则对于任何线程中任何未处理的异常都会在该应用程序域中引发该事件(无论该线程在哪个应用程序域中启动)。如果该线程在有 UnhandledException 的事件处理程序的应用程序域中启动,则会在该应用程序域中引发该事件。如果该应用程序域不是默认应用程序域,并且默认应用程序域中还有一个事件处理程序,则在这两个应用程序域中都会引发该事件。例如,假设某个线程在应用程序域“AD1”中启动,调用应用程序域“AD2”中的某个方法,并且在这里调用应用程序域“AD3”(在此引发异常)中的某个方法。可以在其中引发 UnhandledException 事件的第一个应用程序域是“AD1”。如果该应用程序域不是默认应用程序域,则在默认应用程序域中也可以引发该事件。在 .NET Framework 1.0 和 1.1 版中,在主应用程序线程以外的线程中发生的未处理异常由运行库捕获,因此不会导致应用程序终止。这样就可能在应用程序不终止的情况下引发 UnhandledException 事件。在 .NET Framework 2.0 版中,这一对子线程中未处理异常的支持已被移除,因为这类静默失败的累积后果(包括性能降低、数据损坏及锁定)会使程序调试很难进行。有关更多信息(包括运行库不会终止情况的列表),请参见托管线程中的异常。若要为此事件注册事件处理程序,必须具有所需权限,否则将引发 SecurityException。有关处理事件的更多信息,请参见使用事件。未处理异常的其他事件
对于某些应用程序模型,如果在主应用程序线程中发生未处理的异常,则其他事件可以优先于 UnhandledException。在使用 Windows 窗体的应用程序中,主应用程序线程中的未处理异常会导致引发 Application..::.ThreadException 事件。如果处理此事件,则默认行为是未处理的异常不终止该应用程序(尽管它处于未知状态)。在这种情况下,不会引发 UnhandledException 事件。在挂钩 ThreadException 事件处理程序之前,可以更改此行为,方法是通过使用应用程序配置文件,或者通过使用 Application..::.SetUnhandledExceptionMode 方法将模式更改为 UnhandledExceptionMode..::.ThrowException。这仅适用于主应用程序线程。对于其他线程中引发的未处理异常,将引发 UnhandledException 事件。从 Microsoft Visual Studio 2005 开始,Visual Basic 应用程序框架为主应用程序线程中的未处理异常提供了另一个事件。请参见 WindowsFormsApplicationBase.UnhandledException 事件或 My.Application.UnhandledException 事件。此事件包含一个名称与 AppDomain..::.UnhandledException 所使用的事件实参对象相同的事件实参对象,但属性不同。尤其是,此事件实参对象有一个 ExitApplication 属性,该属性允许应用程序继续运行,忽略未处理的异常(使应用程序处于未知状态)。在这种情况下,不会引发 AppDomain..::.UnhandledException 事件。using System;
using System.Security.Permissions;public class Test { [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlAppDomain)]
public static void Example()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler); try {
throw new Exception("1");
} catch (Exception e) {
Console.WriteLine("Catch clause caught : " + e.Message);
} throw new Exception("2"); // Output:
// Catch clause caught : 1
// MyHandler caught : 2
} static void MyHandler(object sender, UnhandledExceptionEventArgs args) {
Exception e = (Exception) args.ExceptionObject;
Console.WriteLine("MyHandler caught : " + e.Message);
} public static void Main() {
Example();
}
}
{
try
{
return (int) x / y;
}
catch(Exception ex)
{
throw ex;
}
}
上面的代码我不想写try catch,我要继承一个类,统一处理。。怎么写?