有什么方法可以截获某个域中未捕获的异常 AppDomain.UnhandledException可以获的异常,却截不下来,求解 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 try { } catch (Exception) { throw; } 普通的TRY应该就可以了吧 用最简单的try catch,用except的基类不要用具体异常类 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) {//写到日志文件 } } Application.ThreadException//只能捕获UI线程的异常,我的异常是自己建立的域中抛出的异常,此事件没有帮助AppDomain.UnhandledException//这个好像是临死前写下遗言,写完后就死了现在的需求是,我新建域,在域里试着执行代码,如果域里抛出什么异常,不让这些异常影响主进程,直接抛弃域。所以以上两个事件并不能阻止域抛出的异常是主程序崩溃,怎样才能不让域抛出异常呢 在.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>主线程异常就好处理了。注:如果“域里试着执行代码”不用创建线程,则更干净的做法是设定域权限,使他不能创建线程。同样主线程异常很好处理。 谢谢gomoku的回复,你的方法很大程度上解决了我的问题你采取的是无视异常的方式,不过这种方式有两个小缺点:运行没问题,但是却很难去调试,因为调试时能检测到异常;在console下,异常依然会显示在黑屏上。不过这都是小问题,不怎么影响运行就行了:)“域里试着执行代码”,代码好多是别人的,很难保证里面不会创建线程,如果加限制可能使代码无法正常运行。微软的机制还不算太全,勉强用吧 如何取的列表中二维数组的每个值? 弱智问题——如何写存储过程?C#如何用存储过程? datagridview checkbox无法排序? 批量更新新问题 SQL问题 select 的内联语句? 简单问题:传参数可是DateTime类型吗? C# 如果保存数据库操作参数OleDbParameter数组 14018371是关于asp。net和c#的技术群 欢迎高手加入 这样写错了吗? 我有个想法 很奇怪的问题...
{ }
catch (Exception)
{
throw;
}
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)
{//写到日志文件
}
}
//只能捕获UI线程的异常,我的异常是自己建立的域中抛出的异常,此事件没有帮助
AppDomain.UnhandledException
//这个好像是临死前写下遗言,写完后就死了现在的需求是,我新建域,在域里试着执行代码,如果域里抛出什么异常,不让这些异常影响主进程,直接抛弃域。所以以上两个事件并不能阻止域抛出的异常是主程序崩溃,怎样才能不让域抛出异常呢
像你的情况可以要求程序兼容1.1行为。
1、添加一个配置文件(App.Config)
2、加入runtime节并指定legacyUnhandledExceptionPolicy:<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<legacyUnhandledExceptionPolicy enabled="1"/>
</runtime>
</configuration>
主线程异常就好处理了。注:如果“域里试着执行代码”不用创建线程,则更干净的做法是设定域权限,使他不能创建线程。同样主线程异常很好处理。