c# – 你可以在另一个线程上重新抛出.NET异常吗?

在C#中捕获异常的一个线程是合法和安全的,然后重新抛出另一个线程.

例如.这是合法的吗

Exception localEx = null;

Thread mythread = new Thread() { () =>
                   {
                        try
                        {
                            DoSomeStuff();
                        }
                        catch(Exception ex)
                        {
                            localEx = ex;
                        }
                    });

myThread.Start();
...
myThread.Join();

if(localEx != null)
   throw localEx;    // rethrow on the main thread

我认为这是合法的,但我无法找到证明它的任何doco.我发现最接近的是在线程间转移异常:http://msdn.microsoft.com/en-us/library/ms229005.aspx

解决方法

是的,这是合法的.异常是(一般来说)没有线程亲和性的描述对象.

你最好在一个新的异常中包装你的线程异常:

throw new Exception("Something descriptive here",localEx);

这样,localEx中的堆栈跟踪将被保留(作为新异常的InnerException).

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...