返回信息流@ahomer
@wodetiandi
看到过版主和wodetiandi讨论过这个问题,但是好像没什么结论。
我现在遇到相同的问题,原因就是我使用第三方的dll,而第三方库中会创建新的线程,并有异常。
对于我来说,我当然不想由于这个原因是我的软件crash, AppDomain unhandlexception 阻止不了
crash,异常会继续抛,被CLR抓到,可是那时候就太晚了。
我想抓到这个异常,然后unload, reload dll, 这在.NET4.0下可能吗?
PS:别让我去改dll,那是第三方的(当然写的不是很好,小概率出现unhandled exception )
这是一条镜像帖。来源:北邮人论坛 / dot-net / #3885同步于 2012/9/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖
unhandled exception
airb9
2012/9/27镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
刚刚试了一下,由于dll是用C/C++写的, AppDomain.CurrentDomain.UnhandledException 根本触发不了,想得到点信息都不行
新开的进程.Net不能自动捕捉到
不过你想要的是不让这个dll使主线程退出,所以你可以用子进程的方式执行代码,然后进程间通信,子进程出问题不会导致父进程退出。当然这个还不是很理想,也可能会抛错,但抛错后还可以继续用。
还有一种方式比较麻烦,在Kernel32.dll里有个函数SetUnhandledExceptionFilter,你可以研究下(别问我,这个我也没用过,c++看着头痛。。。)
ps:既然敢用第三方dll,那就要冒出异常的风险,谁让你用了呢
谢谢 wodetiandi和版主
进程间通信的话,你说得对,不是很理想。
这几天又看了下书和网上的文章,其实catch unhandled exception又不退出是非常危险的,我觉得比较有道理,不知道上下文就catch确实不恰当。
现在我想catch那个异常,打包异常信息之后退出。
但是我发现好像catch unmanaged code异常比较困难(在dll中会有新的线程), 有什么好方法?。。。。。。。。