У меня проблема с VS2010, когда отладчик останавливается с необработанным исключением.Тем не менее, исключение определенно обрабатывается.Фактически, если я добавлю код в блок catch, я нажму его, когда нажму F5.В Отладке -> Исключения, я определенно не установил флажок «Брошенный», поэтому у IMO нет абсолютно никакой причины для всплывающего диалогового окна необработанного исключения ...
Я могуне размещать точный код, но скоро будет работать над образцом.Основная идея, лежащая в основе кода обидного кода, состоит в том, что у меня есть поток, который общается с аппаратным обеспечением, и если у меня возникает ошибка при разговоре с ним, я выдаю HardwareException
.Поток запускается с BeginInvoke
, и исключение перехватывается в обработчике обратного вызова, когда я вызываю EndInvoke
.
Когда в отладчике выбрасывается исключение, я получаю окно с сообщением «HardwareException не обработано»по коду пользователя ". Но это !!!
РЕДАКТИРОВАТЬ - Ну, это сводит меня с ума. У меня есть пример кода, который представляет код, который у меня есть в приложении, и выглядитэто:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Remoting.Messaging;
using System.Threading;
namespace ConsoleApplication1
{
public class HardwareException : ApplicationException
{
public HardwareException( string message) : base(message) {}
}
class Program
{
delegate void HardwareTestDelegate();
static void Main(string[] args)
{
HardwareTestDelegate d = new HardwareTestDelegate( HardwareTestThread);
d.BeginInvoke( HardwareTestComplete, null);
while( true);
}
static void HardwareTestThread()
{
throw new HardwareException( "this is a test");
}
static void HardwareTestComplete( IAsyncResult iar)
{
try {
AsyncResult ar = (AsyncResult)iar;
HardwareTestDelegate caller = (HardwareTestDelegate)ar.AsyncDelegate;
caller.EndInvoke( iar);
} catch( Exception ex) {
Console.WriteLine( "Should see this line without getting an unhandled exception message in the IDE");
}
}
}
}
Я выбрасываю свое HardwareException из потока и затем обрабатываю исключение при вызове EndInvoke. Я думаю, Мерфи был прав, потому что когда я запускаю этот пример кода, он делает то, что я ожидаю -т.е. в IDE не появляется сообщение об ошибке необработанного исключения!