手机
当前位置:查字典教程网 >编程开发 >C#教程 >C# WinForm捕获全局变量异常 SamWang解决方法
C# WinForm捕获全局变量异常 SamWang解决方法
摘要:许多小公司的项目都缺少异常处理模块,我们也是。经常会出现这种情况,用户在UI界面操作,就直接跳出堆栈调用的异常信息对话框,老板看到那叫一个火...

许多小公司的项目都缺少异常处理模块,我们也是。经常会出现这种情况,用户在UI界面操作,就直接跳出堆栈调用的异常信息对话框,老板看到那叫一个火啊!你们的代码怎么天天出现乱码。呵呵!这就是没有异常捕获处理导致的,现在许多人写代码都没意识处理异常,只要实现功能就好,我的许多组员也是如此。

项目刚接手,所以打算做一个异常全局捕获,统一处理的模式,采用具体详细信息的对话框提醒与日志文件保存方式。以下是根据网上找的C#winform全局异常捕获做了点修改。(等项目异常处理全部完成后,将心得体会做个记录,此处暂对全局异常捕获做个记录)

复制代码 代码如下:

static class Program

{

/// <summary>

/// 应用程序的主入口点。

/// </summary>

[STAThread]

static void Main()

{

try

{

//设置应用程序处理异常方式:ThreadException处理

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

//处理UI线程异常

Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);

//处理非UI线程异常

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

#region 应用程序的主入口点

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

#endregion

}

catch (Exception ex)

{

string str = GetExceptionMsg(ex,string.Empty);

MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)

{

string str = GetExceptionMsg(e.Exception, e.ToString());

MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

//LogManager.WriteLog(str);

}

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)

{

string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString());

MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

//LogManager.WriteLog(str);

}

/// <summary>

/// 生成自定义异常消息

/// </summary>

/// <param name="ex">异常对象</param>

/// <param name="backStr">备用异常消息:当ex为null时有效</param>

/// <returns>异常字符串文本</returns>

static string GetExceptionMsg(Exception ex,string backStr)

{

StringBuilder sb = new StringBuilder();

sb.AppendLine("****************************异常文本****************************");

sb.AppendLine("【出现时间】:" + DateTime.Now.ToString());

if (ex != null)

{

sb.AppendLine("【异常类型】:" + ex.GetType().Name);

sb.AppendLine("【异常信息】:" + ex.Message);

sb.AppendLine("【堆栈调用】:" + ex.StackTrace);

}

else

{

sb.AppendLine("【未处理异常】:" + backStr);

}

sb.AppendLine("***************************************************************");

return sb.ToString();

}

}

参考:

复制代码 代码如下:

static class Program

{

/// <summary>

/// 应用程序的主入口点。

/// </summary>

[STAThread]

static void Main()

{

try

{

//处理未捕获的异常

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

//处理UI线程异常

Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);

//处理非UI线程异常

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

#region 应用程序的主入口点

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Main());

#endregion

}

catch (Exception ex)

{

string str = "";

string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "rn";

if (ex != null)

{

str = string.Format(strDateInfo + "异常类型:{0}rn异常消息:{1}rn异常信息:{2}rn",

ex.GetType().Name, ex.Message, ex.StackTrace);

}

else

{

str = string.Format("应用程序线程错误:{0}", ex);

}

//MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

LogManager.WriteLog(str);

}

}

static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)

{

string str = "";

string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "rn";

Exception error = e.Exception as Exception;

if (error != null)

{

str = string.Format(strDateInfo + "异常类型:{0}rn异常消息:{1}rn异常信息:{2}rn",

error.GetType().Name, error.Message, error.StackTrace);

}

else

{

str = string.Format("应用程序线程错误:{0}", e);

}

//MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

LogManager.WriteLog(str);

}

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)

{

string str = "";

Exception error = e.ExceptionObject as Exception;

string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "rn";

if (error != null)

{

str = string.Format(strDateInfo + "Application UnhandledException:{0};nr堆栈信息:{1}", error.Message, error.StackTrace);

}

else

{

str = string.Format("Application UnhandledError:{0}", e);

}

//MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);

LogManager.WriteLog(str);

}

}

【C# WinForm捕获全局变量异常 SamWang解决方法】相关文章:

c# winform取消右上角关闭按钮的实现方法

C# WinForm程序完全退出的问题解决

C# 获取打印机当前状态的方法

WinForm子窗体访问父窗体控件的实现方法

配置C#的系统环境变量的方法

.NET(C#):Emit创建异常处理的方法

C#利用com操作excel释放进程的解决方法

用C#实现启动另一程序的方法实例

解析Silverlight调用WCF/Rest异常的解决方法

共享锁using范围的实现方法

精品推荐
分类导航