Как обработать ошибку в другом потоке? - PullRequest
1 голос
/ 27 мая 2010

Я пытаюсь обработать ошибки, которые произошли в других потоках. Программа .NET CF выглядит следующим образом:

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

void Start()
{
     ... Exception here

}

В моей ситуации установка try catch в методе Start невозможна. Как я могу справиться с этим в глобальном коде?

Ответы [ 2 ]

5 голосов
/ 27 мая 2010

Не вдаваясь в лучшие практики обработки исключений, вы можете использовать метод shim, чтобы делать то, что вы хотите, например,

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/

4 голосов
/ 27 мая 2010

Вы можете использовать AppDomain.UnhandledException , но вы не можете "восстановить" приложение из этого, лучшее, что вы можете сделать, это отобразить сообщение для пользователя и завершиться неудачей.

...