如何处理其他线程上的错误?

时间:2010-05-27 06:21:33

标签: .net multithreading compact-framework exception-handling

我正在尝试处理.NET CF程序如下所示的其他线程上发生的错误:

static void Main()
{
    Thread t = new Thread(Start);
    t.Start();
    ...
}

void Start()
{
     ... Exception here

}

在我的情况下,将start catch放在Start方法中是不可能的。如何在全局代码中处理它?<​​/ p>

2 个答案:

答案 0 :(得分:5)

如果没有进入异常处理的最佳实践,您可以使用填充方法来执行您想要的操作,例如。

static void Main()
{
  Thread t = new Thread(Shim);
  t.Start();
  ...
}

void Shim()
{
  try
  {
    Start();
  }
  catch
  {
    //If there's something you can really do about it...
  }
}

void Start()
{
  ... Exception here

}

<强>更新

如果您指的是NUnit忽略非测试线程上的异常的方式,请参阅我写的一篇博客文章,其中描述了与ReSharper测试运行器相同的问题\功能。它由legacyUnhandledExceptionPolicy控制。

http://gojisoft.com/blog/2010/05/14/resharper-test-runner-hidden-thread-exceptions/

答案 1 :(得分:4)

您可以使用AppDomain.UnhandledException,但无法从中“恢复”应用程序,您可以做的最好的事情是向用户显示消息并正常失败。