2010-01-19 4 views
5

J'ai une application simple quand j'ai besoin d'arrêter un thread backround en utilisant la fonction Stop() avant la fermeture de l'application. Le problème est que ma fonction principale() a plusieurs points de sortie (déclarations de retour)AppDomain.CurrentDomain.ProcessExit et nettoyage

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

// some code 
return; 

//// etc 
} 

J'essayé d'utiliser AppDomain.CurrentDomain.ProcessExit comme un lieu signle pour le nettoyage, mais il est jamais appelé (au moins pendant qu'il est un fil de fond). Existe-t-il un moyen de mettre en œuvre une bonne façon de mettre en œuvre cela?

+1

Pourquoi ne pas vous factoriser la fonction principale d'avoir un seul point de sortie? – Restuta

+1

Demandez-vous comment vous pouvez optimiser pour avoir un seul point de sortie, ou voulez-vous pouvoir tuer votre processus et tous ses threads d'arrière-plan à un moment donné? – Abel

+1

Il n'est jamais appelé parce que votre thread est toujours en cours d'exécution, ce qui maintient le processus en vie. Cela a été couvert dans votre question précédente. –

Répondre

4

Vous pouvez envelopper tout ce que vous code dans une méthode distincte et l'appeler de 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 .. simple et bonne solution, d'accord .. –

2

Modifiez les appels return; et appelez une routine de nettoyage qui a également mis fin au processus.

2

Vous pouvez utiliser Application.ApplicationExit Event

Selon MSDN l'événement:

produit quand l'application est sur le point de fermer.

+4

Seulement si son application est une application sous forme de fenêtre. Pour une application console, cela ne fonctionnera pas. – affan