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

Windows Presentation Foundation Discussion :

BackgroundWorker et UserControl


Sujet :

Windows Presentation Foundation

  1. #1
    Membre confirmé Avatar de Lelio1407
    Inscrit en
    Juillet 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 126
    Par défaut BackgroundWorker et UserControl
    Bonjour à tous,
    J'ai un userControl qui contient des champs de paramétrage d'un Download. Lorsque je click sur le bouton OK de ce UserControl, je lance le téléchargement dans un BackgroundWorker. Je veux que ce UserControl se ferme et laisse la place à un autre UserControl qui contient une ProgressBar. Mon problème est que suite au clik, le téléchagement est lançé mais mon UserControl ne se ferme pas et celui contenant la ProgressBar n'apparait pas. Je pense que c'est un problème de rafraichissement mais je ne sais pas comment faire.
    voici le code :
    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
    private void Download_ButtonClick(object sender, RoutedEventArgs e)
    {
         Download_UserControl.Visibility = Visibility.Hidden;
         
         DownloadProgressBar_UserControl.Visibility = Visibility.Visible;            
        
        _downloadWorker = new BackgroundWorker();
         _downloadWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(_downloadWorker_DoWork);
         _downloadWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(_downloadWorker_RunWorkerCompleted);
                
               
         _downloadWorker.RunWorkerAsync();
         Thread.Sleep(100);
    
        while (this._downloadWorker.IsBusy)
        {
             UpadteProgressBarValue();
             Thread.Sleep(100);
         }
    avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void _downloadWorker_DoWork( object sender, DoWorkEventArgs e)
    {
               MyClassCom.Load_GraphicLibrary(MyFile);
     }
    Merci d'avance pour votre aide!

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Essaie de lancer le BackgroundWorker sur l'évènement IsVisibleChanged du UserControl qui contient la ProgressBar (DownloadProgressBar_UserControl).
    Quand la visibilité passe à Visible, tu peux lancer le téléchargement.

  3. #3
    Membre confirmé Avatar de Lelio1407
    Inscrit en
    Juillet 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 126
    Par défaut
    Merci. Je viens d'essayer cette solution mais j'ai toujours le même problème.
    En résumé, je souhaitais utiliser un thread pour mettre ma fonction de téléchargement en fond et garder la main sur mon appli principale mais malgré l'utilisation (mauvaise?) du BackGroundWorker, le téléchargement prend quand même la main sur l'appli.

    Dans l'exemple d'utilisation de msdn du BackgroundWorker en WindowsForm, ils utilisent la fonction Application.DoEvents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     while (this._downloadWorker.IsBusy)
                {
                    UpdateProgressBar()
                    // Keep UI messages moving, so the form remains 
                    // responsive during the asynchronous operation.               Application.DoEvents();            }
    Mais elle n'existe plus en WPF....

    Une idée?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    tu as une version du doevent sur mon blog
    mais a mon avis va falloir decoupler les message du thread et l'interface graphique
    regarde y' pleins de post sur le sujet ici

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/12/2009, 17h49
  2. [C#] UserControl
    Par topolino dans le forum ASP.NET
    Réponses: 8
    Dernier message: 22/01/2005, 20h26
  3. XMLRAD equivalent usercontrol ASp .NET
    Par le-roy_a dans le forum XMLRAD
    Réponses: 10
    Dernier message: 10/12/2004, 14h09
  4. Réponses: 12
    Dernier message: 18/03/2004, 15h09
  5. [VB6] [UserControl] Évènements personnalisés
    Par Frankywinky dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/05/2003, 17h56

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