2009-06-24 11 views
10

Estoy trabajando en un error donde el código no siempre se ejecuta antes de que se cierre una aplicación. El código estaba en un controlador para el evento AppDomain.CurrentDomain.DomainUnload.ProcessExit frente a DomainUnload

me encontré con un post de alguien con el mismo problema que recibió este consejo

"En el momento en el evento DomainUnload sucede para el dominio de aplicación por defecto, el código de ha dejado de ejecutar. Es probable que pueda hacer lo que tiene para con el evento ProcessExit en el AppDomain predeterminado. "

Esto funcionó para mí, pero me gustaría saber por qué. No he podido encontrar mucho en ninguno de estos eventos ni en las diferencias entre ellos. También me pregunto si necesito suscribirme a ambos o si el ProcessExit es suficiente.

EDIT:

que quería añadir más información para hacer esto un poco más útil.

Olvidé que los nuevos hilos se estaban creando en su propio Dominio de aplicación. Como quería que este código se ejecutara no solo cuando el proceso principal estaba terminado sino también cuando terminaba cada thread, necesitaba suscribirme al evento DomainUnload para manejar cuándo terminaba cada hilo y también el evento ProcessExit para capturar cuando finalizaba el proceso principal.

Respuesta

13

ProcessExit debería ser suficiente.

El evento DomainUnload está diseñado para ser manejado por otros AppDomains, no el AppDomain que está siendo descargado. Como resultado, si el controlador está adjunto en el dominio que se está descargando, es posible que no se ejecute. El evento ProcessExit está diseñado para ejecutarse cuando el proceso es yendo a la salida.

+0

[MSDN] (http://msdn.microsoft.com/en-us/library/system.appdomain.domainunload (v = vs.110) .aspx) dice 'AppDomain.DomainUnload' Event" Se produce cuando un AppDomain está a punto de ser descargado ". y está destinado a ser utilizado por el 'AppDomain' que se está descargando. –

+0

@MehrdadAfshari: Parece que no es así: 'recuerde que después de que se dispare el evento DomainUnload, nunca verá un evento ProcessExit porque su AppDomain ya se ha ido' - http://www.codeproject.com/Articles/16164/ Managed-Application-Shutdown –