2009-03-20 6 views
2

J'ai une application qui prend des âges à fermer. Lorsque je ferme l'application, elle essaie de disposer un certain nombre de threads qui effectuent l'analyse TCP, les tentatives WCF P2P, etc. Le problème réside dans un thread WCF qui se bloque sur une méthode pendant environ 17 secondes.Quel est le meilleur moyen de fermer un thread WCF?

IP2PAuthenticationService server; 
ChannelFactory<IP2PAuthenticationService> channelFactory; 
channelFactory = new ChannelFactory<IP2PAuthenticationService>(binding, endpointAddress); 

server = channelFactory.CreateChannel(); 
string result = server.SendMyDetails(myContract, "foo"); 

Alors tout cela se passe à l'intérieur d'un fil. Lorsque le formulaire se ferme, il tente d'éliminer le fil

if (prospectCrawlerThread != null) 
{ 
     prospectCrawlerThread.Abort(); 
     //prospectCrawlerThread.Join(); 
     prospectCrawlerThread = null; 
    } 

J'ai confirmé ce décommenter les .Join(), et aussi en arrêtant la mise au point et de voir les fils qui sont encore en cours d'exécution.

Quelle est la meilleure façon de se débarrasser de ce fil?

Edit: réglage du fil à fond semblait rendre plus rapide prospectCrawlerThread.IsBackground = true;

Répondre

3

IsBackgroundThread = true annulera automatiquement le fil lorsque le formulaire ferme, donc je pense que ce que vous cherchez si vous voulez juste tue le.

+0

Cette meilleure pratique pour les fils de sockety? –

+0

Il fera le travail, cependant, je construirais d'une certaine façon de fermer des sockets sur l'événement FormClosing de l'application. Surtout si vous êtes le côté serveur. – Brandon

Questions connexes