2010-08-02 3 views
1

Je développe l'application C# .NET windows Forms. Dans lequel j'ai une fenêtre principale et quelques autres classes de forme de fenêtre (qui sont utilisées comme boîtes de dialogue). J'ai une tâche de calcul intensif (prend 3-4min). Lorsque l'utilisateur sélectionne cette tâche dans le menu, une nouvelle boîte de dialogue (fenêtre) apparaît et prend les paramètres requis de l'utilisateur et il a une barre de progression qui montre la progression de la tâche. J'utilise BackgroundWorker dans cette boîte de dialogue pour effectuer le calcul et signaler la progression. Ce BackgroundWorker écrit également toutes les valeurs intermédiaires dans un fichier journal nommé status.log.Quand le thread BackgroundWorker est-il tué?

Le problème est que lorsque l'utilisateur ferme cette boîte de dialogue, le fichier journal doit être fermé. Je suppose que BackgroundWorker associé à cet objet sera également détruit. Donc, j'ai écrit même gestionnaire pour FormClosed événement de cette boîte de dialogue et en fermant le fichier dans cela. Mais il semble que BackgroundWorker n'est pas tué d'ici là. Je veux dire, BackgroundWorker lance maintenant une exception que le fichier est fermé & ne peut pas écrire dans un flux qui est fermé.

Comment gérer cette situation? Quand dois-je fermer le flux de fichiers? Quand le thread BackgroundWorker est-il tué?

Répondre

1

Les threads de travail en arrière-plan ne sont pas supprimés: ils sont renvoyés au pool de threads.

Gérez l'événement RunWorkerCompleted. MISE À JOUR: en réponse à votre commentaire: Dans l'événement de fermeture du formulaire, signalez l'annulation à l'agent d'arrière-plan. Voir la réponse acceptée à .NET: How to wait for a BackgroundWorker to cancel?

+0

Je ne parle pas de la situation où la tâche est terminée. Je gère déjà l'événement 'RunWorkerCompleted'. Je parle de situation où l'utilisateur ferme (brusquement) le dialogue au milieu du calcul. Ensuite, j'ai également besoin de fermer le fichier car si je redémarre la boîte de dialogue, il se plaint que ce fichier est utilisé par un autre processus. – claws

Questions connexes