Maison >développement back-end >C++ >Comment puis-je empêcher la fermeture d'un écran d'éclaboussures avant la fin d'un fil d'arrière-plan?

Comment puis-je empêcher la fermeture d'un écran d'éclaboussures avant la fin d'un fil d'arrière-plan?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-25 08:31:08349parcourir

How Can I Prevent a Splash Screen from Closing Before a Background Thread Finishes?

Prévenir la fermeture prématurée de l'écran de démarrage dans .NET

Cet article aborde le problème courant de la fermeture d'un écran de démarrage avant la fin du traitement du thread en arrière-plan. Nous exploiterons les capacités intégrées de gestion des écrans de démarrage du framework .NET pour une solution robuste.

Utilisation de la base d'applications Windows Forms

Cette approche utilise la classe WindowsFormsApplicationBase pour gérer avec élégance le cycle de vie de l'écran de démarrage.

  1. Configuration du projet : Commencez avec une nouvelle application Windows Forms (.NET Framework 4 ou version ultérieure). Ajoutez une référence à Microsoft.VisualBasic.ApplicationServices.

  2. Formulaire d'écran de démarrage : Créez un formulaire (frmSplash) pour servir d'écran de démarrage.

  3. Modification Program.cs : Dans Program.cs, créez une classe (MyApp) héritant de WindowsFormsApplicationBase.

  4. Remplacer les méthodes : Remplacer les méthodes OnCreateSplashScreen et OnCreateMainForm :

    • OnCreateSplashScreen : instancie et attribue votre frmSplash comme écran de démarrage.
    • OnCreateMainForm : C’est là que se déroule le travail de fond crucial. Effectuez ici vos opérations chronophages. Ce n'est qu'une fois ces opérations terminées que vous devez créer et attribuer votre formulaire principal (Form1). Cela ferme automatiquement l'écran de démarrage.
  5. Exemple de code (Program.cs) :

<code class="language-csharp">using System;
using System.Windows.Forms;
using Microsoft.VisualBasic.ApplicationServices;

namespace MyApplication {
    static class Program {
        [STAThread]
        static void Main(string[] args) {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            new MyApp().Run(args);
        }
    }

    class MyApp : WindowsFormsApplicationBase {
        protected override void OnCreateSplashScreen() {
            this.SplashScreen = new frmSplash();
        }

        protected override void OnCreateMainForm() {
            // Perform time-consuming tasks here...
            // Example: Simulate work with a delay
            System.Threading.Thread.Sleep(3000); 

            // Create the main form AFTER the tasks are complete
            this.MainForm = new Form1();
        }
    }
}</code>

Cette approche révisée garantit que l'écran de démarrage reste visible jusqu'à ce que tous les processus en arrière-plan soient terminés, offrant ainsi une expérience utilisateur bien améliorée. N'oubliez pas de remplacer le System.Threading.Thread.Sleep(3000); par vos opérations de thread d'arrière-plan réelles.

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