J'utilise un BackgroundWorker pour effectuer un calcul long (un seul de ces calculs à la fois).Annulation d'un BackgroundWorker, comment empêcher la course quand il a déjà fini
L'utilisateur a la possibilité d'annuler le travailleur (appelant worker.CancelAsync).
Dans la méthode worker.DoWork je vérifie périodiquement pour le drapeau annuler en attente et retour de la méthode.
Ensuite, l'événement Terminé est déclenché par le travailleur et je peux vérifier que le travailleur a été annulé. De plus, et c'est la chose importante, je fais un nettoyage supplémentaire quand une annulation est détectée.
Je suis sûr qu'il pourrait y avoir problème si l'utilisateur annule le travailleur et il est déjà retourné par la méthode DoWork. Dans ce cas, je voudrais vraiment savoir que le travailleur a été annulé pour que je puisse le nettoyage ...
est-il une meilleure façon de gérer la procédure annuler, avec le nettoyage, d'un travailleur?
C'est une explication très claire. Cependant, puisque le travail ne se fait pas uniquement dans la méthode "DoWork", je devrais passer le EventArgs à chaque classe qui vérifierait l'annulation et j'ai environ 30 de ces classes (problème d'optimisation profonde). C'est faisable mais je pense que ce serait un PITA ... Aussi je n'aime pas que ces classes doivent gérer l'annulation. Je cherche toujours un meilleur moyen. –
"Aussi je n'aime pas que ces classes doivent gérer l'annulation" - Je ne comprends pas votre inquiétude. Si c'est le cas, ne les faites pas gérer l'annulation! Au lieu de cela, vérifiez uniquement l'annulation lorsque l'une de ces classes renvoie le contrôle à votre méthode DoWork principale. – Joe
Ces classes internes effectuent un calcul très long et ne retournent donc pas souvent. –