9
votes

C #: arrêter un fil après une exception

J'ai ce code:

Thread t = new Thread(() => UpdateImage(origin));
t.Name = "UpdateImageThread";
t.Start();


0 commentaires

5 Réponses :


1
votes

Le fil se termine automatiquement car vous ne manipulez pas l'exception, ainsi que le reste de votre processus, en supposant que vous êtes sur .NET 2.0 ou plus (que je suppose que vous êtes dû à la syntaxe C # 3 dans la question).


0 commentaires

16
votes

Si updateImage jette une exception, il va probablement supprimer tout votre processus. Tout fil qui soulève une exception de niveau supérieur indique un gros problème. Vous devez envelopper cela, par exemple en mettant essayer / attraper autour de updateImage et faire quelque chose de convient. Et oui, si une exception arrive au sommet d'un thread, le thread est mort: xxx

(ou votre choix de manutention d'erreur)


0 commentaires

3
votes

L'exception ne fera pas l'arrêt du thread s'il est coincé quelque part dans la méthode de mise à jour de mise à jour - à moins que la clause de capture ne revienne explicitement de la méthode.

S'il est non gré, votre application s'écrasera de toute façon - entraînant l'arrêt du thread;)

Il est préférable de passer un essai ... Catch Block dans votre méthode de mise à jour de mise à jour et effectuez votre manipulation d'erreurs logiques là-bas à l'endroit où elle appartient. Vous pouvez ensuite décider de vous-même pour revenir et mettre fin au fil ou réessayer


0 commentaires

1
votes

C'est comme le fil principal, par exemple s'il y a une exception dans le fil principal et que personne ne l'attrape, le fil principal se termine et votre application.

la même chose pour les threads utilisateur


0 commentaires

10
votes

Depuis .NET 2.0, lorsqu'un fil de fond jette une exception (celle-ci n'est pas manipulée), le temps d'exécution .NET prendra votre processus. Dans une application Windows.Forms, ceci est différent; Vous pouvez utiliser l'application Application.ThreadException pour attirer l'exception.

Ceci était différent dans .NET 1.0 / 1.1, vous pouvez lire ici sur tout le sujet ici (par exemple, comment activer le comportement hérité avec .NET 2.0 ou version ultérieure): http://msdn.microsoft.com/en-us/library/ms228965.aspx#changefromPrevioustions .

Peu importe que vous utilisiez Windows.Forms ou le comportement hérité - si le processus ne quitte pas, vous n'avez pas besoin d'arrêter explicitement le fil; L'exception va l'arrêter.


0 commentaires