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 Forms Discussion :

Form qui se fige lors d'un traitement malgré thread


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Par défaut Form qui se fige lors d'un traitement malgré thread
    Salut,

    Je bosse sur une application Windows Forms qui crée un objet et qui effectue un traitement sur cet objet (appel d'une méthode). Le problème c'est que ce traitement est long et fige la form. J'ai donc utilisé un thread pour faire ce traitement mais la form se fige toujours

    Je ne comprends pas pourquoi. Voici un bout de mon 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
    // Dans la classe de ma form
    Toto monToto= new Toto(prenom, nom, age);
    monToto.Enregistrer();
     
    // Dans la classe de mon objet
    public void Enregistrer()
    {
    	Thread writerThread = new Thread(new ThreadStart(StartWriting));
    	writerThread.IsBackground = true;
    	writerThread.Start();
    }
     
    private void StartWriting()
    {
    	// Traitement long
    }
    Il y a quelque chose que je ne fais pas correctement ?

    Merci.

    ++

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Sur une machine monoprocesseur, l'interface peut tout de même mettre du temps à répondre dans le cas où le thread de travail effectue des calculs très lourd.
    Cela peut aussi se produire lorsque le thread de travail communique fréquemment avec le thread d'UI par l'intermédiaire d'événements.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Par défaut
    Mais là on ne voit pas du tout l'effet du thread : que je le mette ou pas la form se fige autant

    ++

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Est ce que tu rentres dans un des cas que j'ai cités plus haut ? Que fais ton thread exactement ?
    Est ce que tu ne fais pas un Join de ton thread de travail depuis le thread principal ? ou un Wait ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Par défaut
    J'ai un PC monoprocesseur (P4 HT). Le thread récupère des données dans une base de données (requête Select) et les écrit dans un fichier.

    Le thread de travail ne communique pas avec le thread d'UI.

    En fait l'objet est créé par la form qui ensuite appelle une méthode de cet objet. Le thread est lancé par cette méthode. Il fait son boulot et s'arrête tout seul, pas de wait ou de join, juste un start au début...

    ++

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 104
    Par défaut


    Le comportement fenetre blanche se retrouve t il dans d'autres appli : tu lances le traitement et tu déplace une fenêtre IE ou Word.
    Si oui alors c'est le PC qui est saturé...

    Dans le thread en question, y a t il plusieurs opérations potentiellement bloquantes ou juste une lecture réseau et une écriture dique ?

    L'idée est qu'avec une application Winform, la méthode Application.DoEvents() est ton amie si son appel résoud ton problème d'affichage, la question est quand faut il l'appeler ?

    Généralement, tous les N passages dans une boucle.

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

Discussions similaires

  1. [Débutant] Programme qui fige lors d'un get
    Par Cold-S dans le forum C++Builder
    Réponses: 1
    Dernier message: 11/08/2010, 02h17
  2. Réponses: 6
    Dernier message: 28/05/2009, 12h45
  3. Réponses: 1
    Dernier message: 22/10/2008, 16h14
  4. [Animation] Pourquoi se fige-t-elle lors d'un traitement long ?
    Par Marcolinho dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 25/09/2008, 13h29
  5. Form qui reste figée
    Par GGerald77 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 17/09/2007, 21h13

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