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 :

probleme avec background worker


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Par défaut probleme avec background worker
    Bonjour,

    j'essaye de faire effectuer une tache longue (requetes en bdd) a un background worker, mais mon interface graphique se fige pendant le traitement. j'ai pourtant cru comprendre que c'était l'intéret du backgroundworker: que ca ne fige pas. j'ai également essayé avec un thread, ca marche, mais ca plante au bout de quelques minutes.

    auriez vous une idée pour ne plus que ca freeze/plante ?

    voici un bout de mon code:

    Code C# : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
            public maClasse()
            {
                estActif = true;
     
                // Set up the Background Worker Events
                _backgroundWorker.DoWork += _backgroundWorker_DoWork;
                _backgroundWorker.RunWorkerCompleted += _backgroundWorker_RunWorkerCompleted;
            }
     
    BackgroundWorker _backgroundWorker = new BackgroundWorker();
     
            void _backgroundWorker_DoWork(object sender, DoWorkEventArgs evt)
            {
                while (estActif)
                {
                    lock (this)
                    {
                        // connection/requete  BDD oracle
                        Emettre(this); // emmet un evennement a la vue, afin qu'elle se MAJ
                    }
                }
            }
     
            // Completed Method
            void _backgroundWorker_RunWorkerCompleted( object sender, RunWorkerCompletedEventArgs evt)
            {
                if (evt.Cancelled)
                {
                    MessageBox.Show("Cancelled");
                }
                else if (evt.Error != null) 
                {
                   MessageBox.Show("Exception Thrown");
                }
                else { Activer(); }
            }
     
            public void Activer()
            {
                // Run the Background Worker
                 estActif=true;
                _backgroundWorker.RunWorkerAsync();
            }
            public void Desactiver() // arrete le requetage
            { estActif = false; }

    merci d'avance a vous !

  2. #2
    Membre expérimenté Avatar de Gulix
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Par défaut
    A quoi sert le while(estActif) ?

    On dirait que estActif ne passe pas à faux, et donc on ne quitte pas la fenêtre. La fonction Emettre, je pense qu'elle doit être appelée une seule fois, alors il n'y a aucun intérêt de la placer dans cette boucle.
    "L'univers... on croit qu'il est infini mais quand on arrive au bout un gorille géant vous balance des tonneaux."
    Phillip J. Fry

    http://www.gulix.fr/

    BlindShark, Logiciel de Blind Test - Pull N' Bounce - Jeu XNA

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Il faut que tu utilises le BDW mais aussi le Dispatcher.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Par défaut
    merci pour les réponses.

    @Gulix: la fonction Desactiver passe estActif a false. elle est appelée lorsque l'utilisateur choisis d'arreter le traitement (click sur un bouton).
    la fonction Emettre devait bel et bien être utilisée a chaque tour de boucle, afin de mettre l'IG a jour en "temps reel".

    @Thomas: effectivement, le probleme venait du fait que je n'utilisait pas le dispatcher, qui si j'ai bien compri servirait a reprendre la main sur le thread UI afin de pouvoir effectuer des modifications sur l'IG.


    merci a vous deux, j'ai réussi a faire marcher le truc

    PS: j'avais aussi un bug que je comprends toujours pas, dans le corps de la fonction qui recoit l'evennement émi pas emettre, j'avais un listBox.clear() qui bloquait toute l'app. bizarre ...

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

Discussions similaires

  1. [WebForms]Probleme de background-image avec firefox
    Par malhivertman1 dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 17/02/2007, 11h43
  2. [JXTitledPanel]Problèmes avec FormLayout et background
    Par Baptiste Wicht dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 04/09/2006, 09h47
  3. Problème avec un background dans un tableau
    Par Space Cowboy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 25
    Dernier message: 08/08/2006, 23h33
  4. Probleme avec div + css background-color
    Par shwin dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 11/01/2006, 00h14
  5. [css] Probleme avec background repeat
    Par meda dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 10/01/2006, 09h38

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