2012-06-13 26 views
6

¿Cómo o dónde puedo ejecutar un comando cuando se cierra la aplicación, incluso si es una detención de depuración?Detener el evento de depuración en C#

Necesito realizar un comando en cualquier salida, incluso si el usuario es un desarrollador y haga clic en el botón "detener la depuración" en Visual Studio.

Trato con

Application.ApplicationExit += new EventHandler(this.OnApplicationExit); 

pero no funciona. Quizás estoy equivocado o no es el evento.

Estoy usando Winforms y no, en Form Close no puede ser el evento.

Estoy usando Visual Studio 2005 Net Framework 2.0 (por requerimiento del cliente), pero es solo para información.

Tal vez puedo volver a escribir esto ?:

public static void Exit(); 
+2

Tengo curiosidad - ¿por qué el cliente se molesta acerca de depuración de ser detenido? –

+0

@ m.edmondson, Yo también. –

+1

@ m.edmondson Estaba buscando hacer esto para algunas pruebas en la web, necesita iniciar navegadores durante las pruebas y salir del depurador no ejecuta el resto de un bloque de uso que lo limpia. Esto es un poco molesto ya que terminas con muchos navegadores abiertos –

Respuesta

11

El problema es la función de "detener la depuración" pondrá fin a la aplicación por completo - por lo no más código dentro de esa aplicación se ejecutará.

Su única forma de lograr esto sería observar cómo se depura el proceso externamente y ejecutar el código si se ha detenido.

De acuerdo con [MSDN]:

Detener depuración termina el proceso que se está depurando si el programa fue lanzado desde Visual Studio.

Sin embargo, es posible que pueda lograr lo que desea con un visual studio add-in.

+0

Entiendo. +1 para la solución alternativa. ¿Tiene algún enlace para leer sobre lo que se puede hacer en la aplicación, para incluirlo en la documentación de la aplicación TD/FD? Gracias. –

+0

Lamentablemente no como nunca antes he hecho algo como esto, quizás surja otra respuesta. –

+0

¿Qué significa "detener la aplicación por completo"? ¿Enviando WM_CLOSE al formulario principal? ¿O llamando a TerminateProcess? Usted sugiere que esto último es lo que sucede, pero ¿tiene alguna evidencia que respalde este reclamo? – kol

0

De acuerdo con MSDN: http://msdn.microsoft.com/en-us/library/system.windows.forms.application.applicationexit%28v=vs.80%29.aspx

// Handle the ApplicationExit event to know when the application is exiting. 
Application.ApplicationExit += new EventHandler(this.OnApplicationExit); 

private void OnApplicationExit(object sender, EventArgs e) { 
// When the application is exiting 
} 

¿Es esto lo que ha implementado?

+0

No creo que esto se ejecutará al detener la depuración? –

+0

Sí, eso fue lo intenté. Pero no funciona (funciona solo con el flujo normal de la aplicación). –

+0

Vaya, no leo la pregunta. Él quiere que se ejecute incluso si el programa es detenido por un punto de depuración por un desarrollador. No creo que se ejecutará cuando se usa depuración. – Mausimo

1

Prueba esto:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Windows.Forms; 

namespace Prueba { 
    static class Program { 
     [STAThread] 
     static void Main() { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 
      //This is the magic line code :P 
      AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit); 
     } 

     static void CurrentDomain_ProcessExit(object sender, EventArgs e) { 
      MessageBox.Show(""); 
     } 
    } 
} 

La referencia es aquí (Fredrik Mörk): .NET Console Application Exit Event

+0

¿Cómo puedo llamar desde CurrentDomain_ProcessExit un control en mi Form1? –

+0

¿Desea lanzar un formulario de este evento? – batressc

+0

Necesito cambiar muchas cosas, y una de ellas es deshacerse de un objeto (notifyicon) en Form1 (creado por el diseñador) –

Cuestiones relacionadas