Obtener una excepción no controlada en el depurador VS2010 a pesar de que la excepción se maneja

Tengo un problema con VS2010 donde el depurador se detiene con una excepción no controlada. Sin embargo, la excepción definitivamente se maneja. De hecho, si pongo el código en el bloque catch, lo presionaré cuando presione F5. En Debug -> Excepciones, definitivamente hagon marque la casilla "Lanzar", por lo que en mi opinión no hay absolutamente ninguna razón para que aparezca el cuadro de diálogo de excepción no controlada ...

No puedo publicar el código exacto, pero pronto trabajaré en una muestra. La idea básica detrás de la sección del código ofensivo es que tengo un hilo que habla con el hardware, y si tengo un error al hablar con él, entonces arrojo unHardwareException. El hilo se inicia conBeginInvoke, y la excepción queda atrapada en el controlador de devolución de llamada cuando llamo aEndInvoke.

Cuando se lanza la excepción en el depurador, recibo un cuadro de mensaje que dice 'Excepción de hardware no manejada por código de usuario ". ¡Pero lo es!

EDIT - Bueno, esto me está volviendo loco. Tengo un código de muestra que es representativo del código que tengo en mi aplicación, y se ve así:

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");
            }
        }
    }
}

Lanzo mi HardwareException desde el hilo, y luego manejo la excepción cuando se llama a EndInvoke. Supongo que Murphy tenía razón, porque cuando ejecuto este código de muestra, hace lo que esperaba, es decir, ¡no aparece un mensaje de error de excepción no controlado en el IDE!

Respuestas a la pregunta(2)

Su respuesta a la pregunta