No hago mucha programación de Windows GUI, por lo que todo esto puede ser de conocimiento común para las personas más familiarizadas con WinForms que yo. Lamentablemente, no he podido encontrar ningún recurso para explicar el problema que encontré hoy durante la depuración.Control.EndInvoke restablece la pila de llamadas para la excepción
Si llamamos a EndInvoke en un delegado asíncrono. Obtendremos cualquier excepción lanzada durante la ejecución del método relanzado. La pila de llamadas reflejará la fuente original de la excepción.
Sin embargo, si hacemos algo similar en Windows.Forms.Control, la implementación de Control.EndInvoke restablece la pila de llamadas. Esto se puede observar con una simple prueba o mirando el código en Reflector. El extracto de código relevante de EndInvoke está aquí:
if (entry.exception != null)
{
throw entry.exception;
}
entiendo que comienzan/EndInvoke para el Control y delegados asincrónicos son diferentes, pero yo habría esperado un comportamiento similar en Control.EndInvoke.
¿Hay algún motivo por el que Control no haga lo que hace la delegada asíncrona para preservar la pila de llamadas original?
sé, pero como yo no soy el que implementa Windows.Forms.Control es de poca ayuda. –