2010-01-19 8 views
5

Ho una semplice applicazione quando devo interrompere un thread di backround usando la funzione Stop() prima che l'applicazione sia chiusa. Il problema è che il mio funzione main() ha diversi punti di uscita (istruzioni return)AppDomain.CurrentDomain.ProcessEsci e pulisci

static void Main(string[] args) 
{ 
/// some code 
return; 

// some code 
return; 

//// etc 
} 

ho cercato di usare AppDomain.CurrentDomain.ProcessExit come luogo signle fino pulito, ma non viene mai chiamato (almeno mentre ci è un thread in background). C'è un modo per risolvere lo un modo carino per implementarlo?

+1

Perché non refactoring si Funzione principale di avere un solo punto di uscita? – Restuta

+1

Stai chiedendo come ottimizzare per avere un singolo punto di uscita, o vuoi essere in grado di uccidere il tuo processo e tutti i suoi thread in background in un dato momento? – Abel

+1

Non viene mai chiamato perché il thread è ancora in esecuzione, mantenendo il processo attivo. Questo è stato trattato nella tua domanda precedente. –

risposta

4

Puoi avvolgere tutto ciò che il codice in un metodo separato e chiamare da Main():

static void Main(string[] args) 
{ 
    DoSomething(); 
    TerminateThread(); // Thread.Stop() code goes here 
} 

static void DoSomething() 
{ 
    /// some code 
    return; 

    // some code 
    return; 

    //// etc 
} 
+1

Huh .. soluzione semplice e ottima, d'accordo .. –

2

Modificare le chiamate return; e chiamare una routine di pulizia che ha anche interrotto il processo.

2

È possibile utilizzare Application.ApplicationExit Event

Secondo MSDN l'evento:

verifica quando l'applicazione è in procinto di chiudere.

+4

Solo se la sua app è un'applicazione per la creazione di finestre. Per un'applicazione console questo non funzionerà. – affan

Problemi correlati