2010-02-21 6 views
4

Étrange problème. Je tue le thread principal, mais quand le programme se termine, il traite toujours le code après this.Close().Comment tuer le fil principal?

Des idées sur la façon d'arrêter cela?

MessageBox.Show("Servers overloaded. Exiting."); 
this.Close(); 
//...other code that processes even after it closes... 
+1

Comment tuer-vous le fil conducteur? Thread.Abort()? –

+1

WPF? Winforms? Asp.net? – Oded

+0

C'est une application de bureau. Im using this.Close() pour tuer le fil principal. Je n'ai qu'un seul thread en cours d'exécution. –

Répondre

3

Contrairement ASP.Net de Response.End(), appelant Close ne sera pas interrompre le fil.

Vous devez ajouter return; après avoir appelé Close() pour quitter la méthode.

+0

Mais cela soulève la question, pourquoi y a-t-il du code après la méthode Close() si vous ne voulez pas l'exécuter? Mettre un retour après Close() finira par provoquer des avertissements du compilateur sur le code inaccessible. – Josh

+0

Cela n'empêchera pas le code en dehors du formulaire de fonctionner, bien que - je suis d'accord c'est une meilleure approche, mais il ne répond pas à la question ... –

8

La fermeture de la fenêtre n'arrête pas le filetage. Vous pouvez utiliser Environment.Exit pour arrêter immédiatement.

+2

Non, vous ne devriez pas. Vous devriez appeler 'Close' et' return' pour effectuer une sortie gracieuse. – SLaks

+1

Vous ne devriez pas, mais l'OP a demandé comment tuer le thread principal. Fermer et retourner ne fait pas ça. (Abort ne fait pas non plus.) Pour autant que je sache, le seul moyen (géré) de tuer immédiatement le fil principal est de tuer immédiatement le processus. – Josh

+0

Je n'ai pas dit que c'était une bonne idée - mais ce serait la bonne façon de réellement le tuer. –

2

Pourquoi s'arrêterait-il à Close()? Il va encore sortir de votre méthode - la plupart des choses comme Close() vont impliquer d'envoyer quelque chose à la file d'attente des messages Windows et de le faire traiter. Si vous devez sortir MAINTENANT, alors peut-être Environment.FailFast ...

Questions connexes