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
Libérer: 2025-01-31 17:06:12
original
660 Les gens l'ont consulté

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal