Maison > développement back-end > C++ > Comment fermer en toute sécurité un arrière-plan lors de la fermeture du formulaire?

Comment fermer en toute sécurité un arrière-plan lors de la fermeture du formulaire?

Susan Sarandon
Libérer: 2025-01-31 16:51:10
original
175 Les gens l'ont consulté

How to Safely Shutdown a BackgroundWorker During Form Closure?

Gestion correctement l'arrêt de l'arrière-plan sur la fermeture du formulaire

L'utilisation d'un BackgroundWorker pour mettre à jour l'interface utilisateur d'un formulaire nécessite une manipulation minutieuse de la fermeture du formulaire pour éviter des exceptions telles que ObjectDisposedException ou des impasses. L'annulation prématurée du BackgroundWorker pendant la fermeture du formulaire peut provoquer des problèmes de sécurité des filetages, tandis que l'attente de son achèvement peut entraîner des impasses.

La solution optimale consiste à surveiller l'événement FormClosing et à vérifier l'état de BackgroundWorker. Si le travailleur est actif, annulez la fermeture, signalez l'intention de fermer et annulez le BackgroundWorker. Le gestionnaire d'événements BackgroundWorker S RunWorkerCompleted vérifie ensuite le signal de fermeture et ferme le formulaire.

Voici une implémentation raffinée:

private bool closingRequested;

protected override void OnFormClosing(FormClosingEventArgs e) {
    if (backgroundWorker1.IsBusy) {
        closingRequested = true;
        backgroundWorker1.CancelAsync();
        e.Cancel = true;
        this.Enabled = false; // or this.Hide() for a smoother visual experience
        return;
    }
    base.OnFormClosing(e);
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
    if (closingRequested) {
        this.Close();
    }
    closingRequested = false;
    // ... other cleanup tasks ...
}
Copier après la connexion

Cette méthode annule proprement le BackgroundWorker, enregistre la demande de fermeture de l'utilisateur et ferme le formulaire une fois le travailleur terminé. Cela garantit une fermeture robuste et fiable, empêchant les exceptions et les impasses.

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 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