Maison > développement back-end > C++ > Comment un écran de démarrage peut-il attendre la fin d'un fil de discussion en arrière-plan avant de se fermer ?

Comment un écran de démarrage peut-il attendre la fin d'un fil de discussion en arrière-plan avant de se fermer ?

Barbara Streisand
Libérer: 2025-01-25 08:46:10
original
972 Les gens l'ont consulté

How Can a Splash Screen Wait for a Background Thread to Finish Before Closing?

Assurer la visibilité de l'écran de démarrage jusqu'à la fin du fil de discussion en arrière-plan

Cet article explique comment créer un écran de démarrage qui reste affiché jusqu'à ce qu'un thread d'arrière-plan termine le traitement. L'écran de démarrage, résidant dans une SplashScreen classe distincte, apparaît avant le formulaire de candidature principal.

La classe SplashScreen intègre une méthode, GetFromServer, simulant la récupération et le traitement des données du serveur. Cette méthode s'exécute sur un thread séparé, permettant au thread principal d'afficher simultanément l'écran de démarrage. La synchronisation est cruciale pour éviter que l'écran de démarrage ne se ferme prématurément.

Pour réaliser cette synchronisation, un ManualResetEvent est utilisé :

<code class="language-csharp">private ManualResetEvent _threadFinished = new ManualResetEvent(false);

private void GetFromServer()
{
    // ... (Existing GetFromServer method code) ...

    // Signal thread completion
    _threadFinished.Set();
}</code>
Copier après la connexion

La méthode DisplaySplash de la classe SplashScreen est modifiée pour attendre la fin du fil de discussion avant de masquer l'écran de démarrage :

<code class="language-csharp">private void DisplaySplash()
{
    // ... (Existing DisplaySplash method code) ...

    // Wait for thread completion
    _threadFinished.WaitOne();

    // ... (Code to hide the splash screen) ...
}</code>
Copier après la connexion

Enfin, la méthode Main lance l'écran de démarrage et utilise Application.Run avec ShowDialog() sur le formulaire principal pour bloquer le fil de discussion principal jusqu'à ce que l'écran de démarrage se ferme correctement :

<code class="language-csharp">[STAThread]
static void Main()
{
    using (var splashScreen = new SplashScreen(_tempAL))
    {
        splashScreen.Show();

        Application.Run(new Form1(_tempAL));
    }
}</code>
Copier après la connexion

Cette approche garantit la visibilité de l'écran de démarrage jusqu'à ce que le thread d'arrière-plan (GetFromServer) termine ses opérations, ce qui se traduit par une expérience utilisateur soignée.

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