Maison >développement back-end >C++ >Comment arrêter en toute sécurité un fonctionnaire de fond lors de la fermeture d'un formulaire Windows?

Comment arrêter en toute sécurité un fonctionnaire de fond lors de la fermeture d'un formulaire Windows?

Barbara Streisand
Barbara Streisandoriginal
2025-01-31 17:06:12718parcourir

How to Safely Stop a BackgroundWorker When Closing a Windows Form?

Le thread de travail d'arrière-plan lorsque la fenêtre des fenêtres est fermée élégamment

Lorsque vous utilisez Backgroundworker dans la fenêtre Windows, un problème courant consiste à arrêter le thread de travail lorsque la fenêtre est fermée. Cependant, le simple fait d'appeler

dans le processus de traitement des événements de clôture de la fenêtre peut provoquer des verrous anormaux ou bloqués. bgWorker.CancelAsync()

Question 1: ObjectDisposexception dans les appels invoqués

Si

est directement appelé dans le programme de traitement des événements de clôture de la fenêtre, l'appel invoqué ultérieur peut lancer des anomalies

. En effet, la fenêtre est libérée et que le fil principal est sorti. bgWorker.CancelAsync() ObjectDisposedException Question 2: L'impasse lorsque Bgworker est terminé

L'attente dans le processus de fermeture du processus de traitement des événements

L'achèvement peut entraîner des verrous morts, car les appels invoqués sont toujours en cours pour empêcher le thread de travail de terminer.

bgWorker Solution: coordonne la fermeture de la fenêtre et la ligne de travail de fond pour terminer

Afin de résoudre ces problèmes, une méthode plus stable est nécessaire:

Dans la fenêtre Clôture du programme de traitement des événements, si
    est toujours en cours d'exécution, définissez
  1. . bgWorker e.Cancel = true Définissez un logo
  2. pour indiquer la demande de l'utilisateur à fermer.
  3. closePending Dans le programme de traitement des événements , vérifiez le logo
  4. . Si vous avez été réglé, appelez
  5. sur la fenêtre. bgWorker RunWorkerCompleted closePending Close() Cette méthode peut empêcher les anomalies et les verrous morts à travers l'achèvement de la fenêtre pour fermer l'événement et l'achèvement de
  6. .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn