J'appelle obackgroundworker.CancelAsync(); sur un arrière-plan travaillant actuellement dans un autre thread, puis en utilisant while (obackgroundworker.IsBusy == true) pour attendre qu'il se termine avant de quitter l'application (au cas où l'utilisateur change d'avis alors que le thread est absent) et je veux fermer proprement)Annulation de la classe d'ouvreur d'arrière-plan, annule le drapeau en attente d'annulation mais n'abandonne pas
l'appartement d'annulation en attente est à true correctement, mais le fil ne quitte pas, dans le thread de travail que j'ai:
backgroundworker obackgroundworker = (backgroundworker)sender;
if (obackgroundworker.cancellationpending == true)
e.cancel = true;
qui devrait vérifier si une annulation est en attente, puis mettre le drapeau annulé à vrai, et je pense que cela entraîne également la fin du fil ...? ou y at-il une autre fonction que j'ai besoin d'appeler depuis le thread quand il détecte une annulation pour finir réellement?
J'ai lu beaucoup d'exemples qui utilisent des travailleurs d'arrière-plan exactement comme ci-dessus et ne signalent aucun problème.
Sources:
http://www.albahari.com/threading/part3.aspx http://www.dotneat.net/2009/02/10/BackgroundworkerExample.aspx http://www.codeproject.com/KB/cpp/BackgroundWorker_Threads.aspx
Merci
Est-ce l'utilisation correcte de obackgroundworker.IsBusy? après que j'appelle l'annulation deviendra-t-elle fausse? Actuellement, il y a une boucle infinie dessus même après que le thread a été demandé pour l'annulation. – Nath