有什么方法可以截获某个域中未捕获的异常

wodemyworld 2010-09-27 05:58:00
AppDomain.UnhandledException可以获的异常,却截不下来,求解
...全文
142 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wodemyworld 2010-09-29
  • 打赏
  • 举报
回复
结贴撒分
wodemyworld 2010-09-28
  • 打赏
  • 举报
回复
谢谢gomoku的回复,你的方法很大程度上解决了我的问题

你采取的是无视异常的方式,不过这种方式有两个小缺点:运行没问题,但是却很难去调试,因为调试时能检测到异常;在console下,异常依然会显示在黑屏上。不过这都是小问题,不怎么影响运行就行了:)

“域里试着执行代码”,代码好多是别人的,很难保证里面不会创建线程,如果加限制可能使代码无法正常运行。

微软的机制还不算太全,勉强用吧
gomoku 2010-09-28
  • 打赏
  • 举报
回复
在.Net1.0/1.1下,非主线程的未处理异常将被忽略。这本身不是好事,所以2.0后该行为更改了。
像你的情况可以要求程序兼容1.1行为。
1、添加一个配置文件(App.Config)
2、加入runtime节并指定legacyUnhandledExceptionPolicy:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<legacyUnhandledExceptionPolicy enabled="1"/>
</runtime>
</configuration>

主线程异常就好处理了。

注:如果“域里试着执行代码”不用创建线程,则更干净的做法是设定域权限,使他不能创建线程。同样主线程异常很好处理。
gongsun 2010-09-28
  • 打赏
  • 举报
回复
用 log4net 吧。
wodemyworld 2010-09-28
  • 打赏
  • 举报
回复
Application.ThreadException
//只能捕获UI线程的异常,我的异常是自己建立的域中抛出的异常,此事件没有帮助
AppDomain.UnhandledException
//这个好像是临死前写下遗言,写完后就死了

现在的需求是,我新建域,在域里试着执行代码,如果域里抛出什么异常,不让这些异常影响主进程,直接抛弃域。所以以上两个事件并不能阻止域抛出的异常是主程序崩溃,怎样才能不让域抛出异常呢
wuyq11 2010-09-27
  • 打赏
  • 举报
回复
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
}

void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
if (e.Exception is OutOfMemoryException)
{//写到日志文件
}
}
bloodish 2010-09-27
  • 打赏
  • 举报
回复
这里有一些讨论,可供参考
关于处理 未处理异常的问题
zshdy 2010-09-27
  • 打赏
  • 举报
回复
用最简单的try catch,用except的基类不要用具体异常类
flyerwing 2010-09-27
  • 打赏
  • 举报
回复
普通的TRY应该就可以了吧
rwm5366745 2010-09-27
  • 打赏
  • 举报
回复
try
{

}
catch (Exception)
{

throw;
}

110,621

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧