Obtendo uma exceção não tratada no depurador do VS2010, mesmo que a exceção seja tratada
Eu tenho um problema com o VS2010 em que o depurador para com uma exceção não tratada. No entanto, a exceção é definitivamente tratada. De fato, se eu colocar o código no bloco catch, pressionarei quando pressionar F5. Em Debug -> Exceptions, eu definitivamente façonã marque a caixa de seleção "Lançada", para que o IMO não tenha absolutamente nenhuma razão para a caixa de diálogo de exceção não tratada aparecer ...
Não consigo postar o código exato, mas funcionarei em uma amostra em breve. A idéia básica por trás da seção de código incorreto é que eu tenho um thread que fala com o hardware e, se houver um erro ao falar com ele, ligo umHardwareException
. O encadeamento é iniciado comBeginInvoke
e a exceção é detectada no manipulador de retorno de chamada quando eu chamoEndInvoke
.
Quando a exceção é lançada no depurador, eu recebo uma caixa de mensagem que diz 'HardwareException não manipulada pelo código do usuário ". Mas é !!!
EDIT - Bem, isso está me deixando louco. Eu tenho um código de exemplo que é representativo do código que tenho no meu aplicativo e fica assim:
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");
}
}
}
}
Eu jogo minha HardwareException a partir do thread e lida com a exceção quando EndInvoke é chamado. Acho que Murphy estava certo, porque quando executo esse código de exemplo, ele faz o que eu esperava - ou seja, nenhuma mensagem de erro de exceção não tratada aparece no IDE!