none
fenetre d'attente lors d'un chargement de donné d'une listeview RRS feed

  • Discussion générale

  • j'ai une listview qui charge des donné depui un fichier xml, pour faire patienter le client je doit mettre une fenetre contenant une image animé.

    le chargement de la listeview se fait a partir d'un thread, depui le form principal plus excatement ds l'evenment formload je crée un 2eme form où l'image doi aparaitre, mon probleme est que les control (messagebox, bouton..) de la 2eme fenetre ne sont active que lorsque la listeview se charge alor que la fenetre est bien visible

     

    jeudi 2 décembre 2010 09:17

Toutes les réponses

  • j'ai une listview qui charge des donné depui un fichier xml, pour faire patienter le client je doit mettre une fenetre contenant une image animé.

    le chargement de la listeview se fait a partir d'un thread, depui le form principal plus excatement ds l'evenment formload je crée un 2eme form où l'image doi aparaitre, mon probleme est que les control (messagebox, bouton..) de la 2eme fenetre ne sont active que lorsque la listeview se charge alor que la fenetre est bien visible

    Bonjour,

    Heu ... je ne suis pas certain de tout comprendre ... j'ai crompris que tu n'arrivais pas à faire tourner ton animation, que tu n'avais pas la main pour ça (en faisant beaucoup d'effort :o)

    Déjà, si tu fais ton chargement à partir du Load, les objets ne sont pas encore mis en place, alors c'est difficilement gérable ainsi, il faudrait attendre que tout soit placé : 

    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
    - lancement de la second forme et de l'animation en premier plan de l'application
    - My.Application.DoEvents() ' petite pause
    - lancement de ton chargement
    End Sub

    Cordialement.

     


     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    jeudi 2 décembre 2010 10:39
  • Au lieu de faire 2 formulaires, à mon avis le plus simple est de mettre une petite animation à côté de la list View pendant qu'elle se charge (Exemple, l'animation qui apparaît quand tu réponds à un sujet sur ce forum, tu joue sur la visibilité de l'animation) et de lancer dans le thread le chargement de cette liste view. bien sûr le thread ne doit pas toucher à des composants graphiques.

     

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        PictureBox1.Visible = True
        BackgroundWorker1.RunWorkerAsync()
      End Sub
    
      Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        System.Threading.Thread.Sleep(5000)
      End Sub
    
      Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
        PictureBox1.Visible = False
      End Sub

    jeudi 2 décembre 2010 10:54
  • mon but est de lancer une fenetre qui contien un image animé pendant le chargement de la listview.

    le chargement de la listeview se fait a parir d'un thread que je lance dans le load de ma fenetre principale

    le probleme est que ma seconde forme s'affiche sans ces control (par exemplen j'ai mis un boutton, il s'est afficher qu'aprés le telechargement de ma listview)

    j'ai essayé ta methode, le blockage manitenant se fait lors de l'animation, c'est a dire ma seconde fenetre est lancé avec l'animation mais le thread ne s'est pa executé

    cordialement

    jeudi 2 décembre 2010 11:05
  • il faut comprendre que c'est le thread principale (le load de ta form par exemple) qui doit afficher l'animation pour que l'animation ne se bloque pas et puis le thread secondaire (le background worker que tu as ajouté) doit s'occuper du reste (traitement de chargement)

    après je n'ai pas tout suivi, mais si tu respecte le principe des threads tout doit bien se passer

    jeudi 2 décembre 2010 11:11
  • Bonjour bis,

    Et ma réponse, tu en penses quoi ?

    A te lire, ta seconde form est censée afficher l'animation d'attente, alors pourquoi elle a un bouton par exemple, je ne vois pas le rapport ?

    Sinon, c'est normal tout ça, à mon avis, que ça ne marche pas, si tu exécutes quelque chose dans le Load, le reste ne va pas s'afficher avant la fin d'exécution (peut être qu'on peut quand même le faire avec des pirouettes ?)... mais ... pourquoi tu n'attend pas que l'affichage soit terminé sur ta form1 avant de lancer la seconde feuille et ta procédure de l'ecture, c'est un truc que je ne comprends pas ?

    Cordialement.

     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    jeudi 2 décembre 2010 11:33
  • le bouton c juste pour tester,

    pour ta reponse j'ai essayé, le blocage mnt est au niveau de l'animation elle se termine pa donc le thread ne s'execute pa

    et si j'enleve la ligne My.Application.DoEvents() l'animation ne s'afiche pa mai le thread est executé

    jeudi 2 décembre 2010 11:44
  • Bonjour, ter,

    Ah, as-tu essayé avec un Timer dans la form2 de l'animation, qui rend la main avec un DoEvent, à la rigueur en mettant la procédure de chargement dans celle du timer ?

    sub Timer1...
     - bouge animation
     - doEvents
     - charge liste
    End Sub
    
    

    Si tu n'y arrives pas, je vois une second méthode "à la hache", tu fais un autre exe juste avec l'animation que par API tu obliges à être toujours au premier plan (chat va vite ... copie de ton code), puis tu lances l'exe, puis ton chargement, et en fin tu arrêtes l'exe. ah ?

    Cordialement.

    Joe.

     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    jeudi 2 décembre 2010 12:06
  • j'ai pa bien saisi ta methode je prefere trouver une solution avec la 1ere demarche,

    le truc c que le thread s'execute en background mai il bloque ma fenetre animé c sa que je comprend pa!!!

    cordialemen

    jeudi 2 décembre 2010 12:56
  • j'ai pa bien saisi ta methode je prefere trouver une solution avec la 1ere demarche,

    le truc c que le thread s'execute en background mai il bloque ma fenetre animé c sa que je comprend pa!!!

    cordialemen

    c'est par ce que ta méthode d'animation n'est pas dans le thread principale !
    jeudi 2 décembre 2010 13:22
  • mon animation elle est simple, c'est un webrowser dont je met l'url a une image.gif animé. 

    j'ai essayé de faire apel a mon webrowser (de ma fenetre d'animation) que j'ai rendu public mai le problem persiste

    le thread bloque la fenetre, elle est uniquement affiché

    jeudi 2 décembre 2010 13:45
  • mon animation elle est simple, c'est un webrowser dont je met l'url a une image.gif animé. 

    j'ai essayé de faire apel a mon webrowser (de ma fenetre d'animation) que j'ai rendu public mai le problem persiste

    le thread bloque la fenetre, elle est uniquement affiché

    utilise un winform (et non pas un web browser) avec le composant picture box, avant de lancer le background worker de tes traitements tu ouvres cette winform, après tu appelle le backgroundworker, à la fin du backgroundworker tu fermes ta fenêtre d'attente. n'utilise pas de webbrowser.
    jeudi 2 décembre 2010 13:48
  • sa reste le meme probleme, je suis convaincu que la modification a faire est au niveau du thread pour qu'il s'execute sana pour autan empecher la fenetre de s'executer normalement. oubien quan je fai mon animationform.showdialog() le thread ne s'execute pa. il fau resoudre l'un de c deux problem

     

     

    jeudi 2 décembre 2010 14:18
  • mon application vise a faire exactement ske fai cette page quan on clique sur "envoyer" apre avoir  ecri!!!
    jeudi 2 décembre 2010 15:05
  • le probleme est que le thread freeze ma fenetre

    saviez vous comment eviter sa?

    jeudi 2 décembre 2010 16:44
  • Ok, donc c'est une ListView.

    Je commencerai par vérifier le code du chargement pour qu'il soit le plus rapide possible. Il existe aussi un "mode virtuel" qui permet de récupérer les données au fur et à mesure des besoins.

    Sinon le problème est que toutes les modifications d'un formulaire ne peuvent se faire que depuis LE thread qui a créé les contrôles. Si on mets donc à jour un contrôle et que l'on fait une animation, les deux vont donc devoir se faire depuis le même thread d'où le problème.

    Je dirais donc :
    - s'assurer que l'alimentation du contrôle ListView est aussi rapide que possible (donc plutôt qq chose comme http://msdn.microsoft.com/en-us/library/bfzz668s.aspx (AddRange) plutôt que d'ajouter tous les items les un après les autres), le but étant de supprimer autant que possible les attentes sur mise à jour de l'UI
    - choisir de préférence une animation pour les traitements d'arrière plan, un message fixe pour les traitements longs sur l'UI ce qui devrait être très exceptionnellement nécessaire...

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 3 décembre 2010 12:53
    Modérateur
  • Bonjour,

     

    Hasananou, peut-être il sera plus facile de comprendre votre démarche si vous nous montrez le code que vous utilisez pour afficher la deuxième fenêtre et pour lancer le thread.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    vendredi 10 décembre 2010 15:56