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

VB.NET Discussion :

[VB.NET]Affichage d'une DialogBox


Sujet :

VB.NET

  1. #1
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut [VB.NET]Affichage d'une DialogBox
    Bonjour à tous,

    Je rencontre un petit souci:

    J'ai un code qui a l’exécution dure un certain temps. Pendant ce petit temps, je souhaiterais afficher un boîte de dialogue avec une phrase du style "Patientez svp" et un petit gif style sablier.

    Mon problème, c'est que lorsque que la fenêtre s'affiche, le gif reste figé pendant tout le temps du traitement... J'ai essayé de mettre une ProgressBar en mode 'Marquee" mais le même phénomène se produit...

    Voici mon code d'appel de la fenêtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            System.Windows.Forms.Application.DoEvents()
            FEN_Wait.Show()
            FEN_Wait.Focus()
            FEN_Wait.Refresh()
    (J'essaye un peu tout !!)

    Mon code dans le Load de la fenêtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub FEN_Wait_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            System.Windows.Forms.Application.DoEvents()
            Me.Refresh()
            Me.ProgressBar1.Refresh()
        End Sub
    Une petite idée ? une piste ??

  2. #2
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Salut,

    Si le traitement fige les éléments de la boîte de dialogue, tu pourrais mettre ce traitement dans un nouveau thread avec, par exemple, un BackGroundWorker

  3. #3
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut
    Je n'arrive pas à utiliser BackGroundWorker...
    J'ai fait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            FEN_Wait.Show()
     
            BackgroundWorker1.RunWorkerAsync()
     
            FEN_Wait.Close()
    Dans le traitement BackGroundWorker_DoWork j'ai mis mon traitement.

    Mais ça marche pas...
    J'ai lu ça:
    http://glarde.developpez.com/dotnet/bgworker/vb/
    mais je comprend pas le fonctionnement...

  4. #4
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut
    Bon...
    De toute façon,ça n'a pas l'air de fonctionner...

    Je pensais que le DoEvent permettrait au gif de fonctionner mais là non...

    Je n'arrive vraiment pas à saisir pourquoi il est figé... Je ne souhaite pas forcement une solution mais plutôt une explication.

    Merci à vous... Encore!

  5. #5
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Citation Envoyé par Yolak Voir le message
    Bon...
    De toute façon,ça n'a pas l'air de fonctionner...

    Je pensais que le DoEvent permettrait au gif de fonctionner mais là non...

    Je n'arrive vraiment pas à saisir pourquoi il est figé... Je ne souhaite pas forcement une solution mais plutôt une explication.

    Merci à vous... Encore!
    Le formulaire ne se rafraichit pas car le traitement est surement long, c'est pourquoi il est intéressant de mettre ce traitement dans un thread d'arrière plan séparé du thread principal.
    Concernant le BackGroundWorker, il faut mettre le traitement long dans l'évènement DoWork.......(tu as trouvé un bon lien pour pouvoir continué)

  6. #6
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut
    il faut mettre le traitement long dans l'évènement DoWork
    C'est bien ce que j'ai tenté de faire mais ça n'a pas l'air de fonctionner...

    Je pensais qu'il pouvait exister une solution simple! Je cherche juste à afficher un gif pendant le temps du traitement. Dois-je construire un tank pour démolir un tas d'allumettes?

    Je cherche encore...

  7. #7
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Citation Envoyé par Yolak Voir le message
    C'est bien ce que j'ai tenté de faire mais ça n'a pas l'air de fonctionner...

    Je pensais qu'il pouvait exister une solution simple! Je cherche juste à afficher un gif pendant le temps du traitement. Dois-je construire un tank pour démolir un tas d'allumettes?

    Je cherche encore...
    Pourtant, c'est pas très compliqué à mettre en oeuvre
    Sinon, tu as mis le GIF dans un picturebox?

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir,
    il existe aussi le curseur avec un gif animé personnifié.
    Il est "TopMost", mais je ne sais pas si cela convient.

  9. #9
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut
    Sinon, tu as mis le GIF dans un picturebox?
    Oui...

    Je vais chercher encore un peu sur ta piste et creuser le backgroundWorker...

    Pour le curseur perso, merci de l'info mais ce n'est pas le rendu que je souhaite.

  10. #10
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut
    Bonsoir,

    Bon...je m'en suis sorti !!

    En fait, plutôt que de faire FEN_Wait.show, j'ai fait :
    Le problème c'est que ShowDialog est bloquant. Je l'ai donc mis dans un BackGroundWorker comme yonpo m'avait conseillé.

    Jusqu'ici tout va bien, la fenêtre s'ouvre... Mais pour la fermer ?
    Et bien je me suis amusé avec les threads de system.threading et les Delegate/Invoke pour m'en sortir...
    Ma source d'info :http://drq.developpez.com/dotnet/articles/threads/

    J'ai donc créé un thread qui boucle sur rien tant que ma variable globale booléenne ne passe pas à vrai (elle passe à vrai à la fin de mon traitement). Ensuite, le thread délégué ferme la fenêtre!

    Youpi un beau char d'assaut pour mon tout petit tas d'allumettes !! BOUM !

    En tout cas, merci beaucoup pour votre aide!

  11. #11
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Citation Envoyé par Yolak Voir le message
    Bonsoir,

    Bon...je m'en suis sorti !!

    En fait, plutôt que de faire FEN_Wait.show, j'ai fait :
    Le problème c'est que ShowDialog est bloquant. Je l'ai donc mis dans un BackGroundWorker comme yonpo m'avait conseillé.

    Jusqu'ici tout va bien, la fenêtre s'ouvre... Mais pour la fermer ?
    Et bien je me suis amusé avec les threads de system.threading et les Delegate/Invoke pour m'en sortir...
    Ma source d'info :http://drq.developpez.com/dotnet/articles/threads/

    J'ai donc créé un thread qui boucle sur rien tant que ma variable globale booléenne ne passe pas à vrai (elle passe à vrai à la fin de mon traitement). Ensuite, le thread délégué ferme la fenêtre!

    Youpi un beau char d'assaut pour mon tout petit tas d'allumettes !! BOUM !

    En tout cas, merci beaucoup pour votre aide!
    Euh....Combien de threads as-tu utilisé pour faire ça???????

    Au passage BackGroundWorker est un thread donc pas besoin d'en créer 3000......

    Bref, je n'aurai pas fait comme ça:

    1 - Ouvrir la fenêtre avec ShowDialog (avec le GIF)
    2 - Mettre le traitement long dans le DoWork du BackGroundWorker => mon thread d'arrière plan pour mon gros traitement qui bloque le rafraichissement de la fenêtre
    3 - Utiliser pourquoi pas le ProgressChanged pour afficher l'état d'avancement du traitement dans un ProgressBar
    4 - Une fois le traitement terminé, l'événement RunCompleted est déclenché. On insert du code dans cet événement (ex: traitement terminé). Enfin, je ferme la fenêtre avec Dispose ou Close.

    Voilà, comme quoi il ne faut pas un char pour écraser une mouche......

  12. #12
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut
    Voilà, comme quoi il ne faut pas un char pour écraser une mouche......
    Heuu ça dépend de la mouche :p

    Je teste ça ce soir

  13. #13
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut
    Oui... C'est vrai que ça marche...
    Merci !

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

Discussions similaires

  1. Affichage d'une DialogBox
    Par mulfycrowh dans le forum Visual C++
    Réponses: 0
    Dernier message: 23/10/2009, 08h34
  2. [C#][.NET] Affichage d'une valeur
    Par Sup@Lou dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/05/2006, 19h04
  3. [VB.NET] Affichage d'une image
    Par boulete dans le forum Windows Forms
    Réponses: 7
    Dernier message: 28/03/2006, 14h38
  4. [C#][.Net] Affichage d'une appli toujours au premier plan
    Par alncool dans le forum Windows Forms
    Réponses: 9
    Dernier message: 13/07/2005, 12h30
  5. Réponses: 2
    Dernier message: 29/11/2004, 12h13

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