IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème avec mon écran de chargement


Sujet :

C#

  1. #1
    Invité
    Invité(e)
    Par défaut Problème avec mon écran de chargement
    Bonjour
    Je suis en train d'écrire un programme en WPF et je souhaite qu'au lancement il y ai un écran de chargement en attendant que certaines données soient récupérées, puis on bascule sur l'écran principal.
    Voici à peu près la structure du programme (en sautant les namespace, class, using, etc) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    private void Started(object sender, EventArgs e)
    {
        LoadingScreen()
        VerifyData()
        MainScreen()
    }
     
    public void LoadingScreen()
    {
        //Affichage de l'écran de chargement
    }
     
    public void VerifyData()
    {
        //Vérifie certaines données comme la connexion Internet
    	System.Threading.Thread.Sleep(10000); //J'ai rajouté cette ligne pour voir si l'écran de chargement s'affiche correctement, car la vérification des données est trop rapide sinon
    }
     
    public void MainScreen()
    {
        //Cache l'écran de chargement et affiche l'écran principal
    }
    Et lorque je démarre le programme, au lieu d'afficher l'écran de chargement pendant environ 10 secondes puis de basculer sur l'écran principal, le programme n'affiche rien du tout pendant 10 secondes puis affiche directement la page principal, comme si le programme attendait que toutes les données soient prêtes en arrière-plan pour lancer l'appli.
    Lorsque que je lance uniquement LoadingScreen(), l'écran de chargement s'affiche correctement.

    Pouvez-vous m'aidez svp ?

  2. #2
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Je pense qu'il se passe exactement ce que tu supposes, le programme attend que toutes les données soient chargées avant d'afficher quoi que ce soit, puisqu'à mon avis (tu ne montres en effet pas tout ton code) tes données ne sont pas chargées en arrière-plan. Le Startup est appelé par le Thread de l'UI et tes méthodes sont synchrones, même si tu fais maFenetre.Show() tout ce que ça fait c'est placer en file d'attente l'ordre d'afficher la fenêtre, mais il ne sera exécuté que lorsque le Thread sera sorti de la méthode courante, le Startup, ce qui n'arrivera que lorsque les données seront chargées. Si tu veux que les données soient chargées en arrière-plan il faut le faire dans Thread différent, en utilisant par exemple les Task.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    private async void Started(object sender, EventArgs e)
    {
        LoadingScreen()
        await Task.Run(() => VerifyData());
        MainScreen()
    }
     
    public void LoadingScreen()
    {
        //Affichage de l'écran de chargement
    }
     
    public void VerifyData()
    {
        //Vérifie certaines données comme la connexion Internet
    	System.Threading.Thread.Sleep(10000); //J'ai rajouté cette ligne pour voir si l'écran de chargement s'affiche correctement, car la vérification des données est trop rapide sinon
        // Dans du vrai code il faudra probablement assurer la synchronisation du contexte.
    }
     
    public void MainScreen()
    {
        //Cache l'écran de chargement et affiche l'écran principal
    }
    Pour les détails sur les Thread, les Task et l'utilisation du Pool de Thread je te renvoie vers les articles de François Dorin.

    Si tu n'as rien de spécial à faire dans ton écran de chargement tu peux aussi tout simplement utiliser un SplashScreen (c'est l'image qui s'affiche par exemple quand tu lances Visual Studio, avant que la fenêtre principale ne soit chargée).

  3. #3
    Invité
    Invité(e)
    Par défaut
    Super, ta solution marche parfaitement. Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec mon écran 19 pouces sous Linux
    Par Flomyr dans le forum Matériel
    Réponses: 2
    Dernier message: 17/01/2008, 20h26
  2. Problème avec mon écran du portable
    Par savoir dans le forum Périphériques
    Réponses: 4
    Dernier message: 12/04/2007, 14h45
  3. Problème avec mon service mysql et PhpMyAdmin
    Par Fixazo dans le forum Outils
    Réponses: 1
    Dernier message: 28/08/2005, 18h02
  4. problème avec mon lecteur CD
    Par leo13 dans le forum Périphériques
    Réponses: 3
    Dernier message: 16/08/2005, 11h21
  5. Problème avec mon firewall ...
    Par Wis dans le forum Tomcat et TomEE
    Réponses: 15
    Dernier message: 06/04/2004, 08h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo