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 :

Accès en Thread Safe


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Accès en Thread Safe
    Bonjour à tous, je en face d'un problème d'accès d'un Thread vers un contrôle (ProgressBar) qui est dans la class form1 et la fonction du Thread dans une Autre class (Snake.cs) alors quand je tente d'acceder vers la ProgressBar il y a toute l'application qui plante. Voici un extrait 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    class snake
        {
    .
    .
    .
     
    public void Lancer_Evolution()
            {
                int nb = iteration;
                int step = 100/iteration;
     
                for (int i = 0; i < nb; i++)
                {
                    this.progress();
                    if (myBar != null)
                    {
                        ff.Invoke(new Form3.prog(ff.incrementer), 1);
                    }
     
     
                    this.display(0, 0);
     
                }
     
     
     
            }
    .
    .
    .
    Et la classe Form3
    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
    21
     
    public partial class Form3 : Form
        {
     
            public Form3()
            {
    InitializeComponent();
    }
    .
    .
    .
    public delegate void prog(int n);
     
            public void incrementer(int step)
            {
               progressBar1.Increment(step);
            }
    .
    .
    .
    }
    Voila merci a l'avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Points : 560
    Points
    560
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ff.Invoke(new Form3.prog(ff.incrementer), 1);
    As tu essayé en enlevant le new ?
    (En partant du principe que Form3 est la fenêtre qui contient ta ProgressBar)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ff.Invoke(Form3.prog(ff.incrementer), 1);

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ton utilisation de Invoke semble correcte... quelle est l'erreur exactement ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Aeronia Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ff.Invoke(new Form3.prog(ff.incrementer), 1);
    As tu essayé en enlevant le new ?
    (En partant du principe que Form3 est la fenêtre qui contient ta ProgressBar)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ff.Invoke(Form3.prog(ff.incrementer), 1);
    Merciiii pour votre réponse mais ça ne marche pas sans le NEW

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ton utilisation de Invoke semble correcte... quelle est l'erreur exactement ?
    Mercccciii deja votre votre réponse rapide, donc le problème c'est que toute l'application se plante et se bloque et le ProgressBar n'évolue pas , et j'ai essayé d'excuser une fonction qui est dans la meme class que Form3 et je l'ai donné à un Thread et sa marche très bien mais d'une class je ne sais pas pourquoiiiiii Voilaaaa.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par toutpart Voir le message
    Mercccciii deja votre votre réponse rapide, donc le problème c'est que toute l'application se plante et se bloque et le ProgressBar n'évolue pas , et j'ai essayé d'excuser une fonction qui est dans la meme class que Form3 et je l'ai donné à un Thread et sa marche très bien mais d'une class je ne sais pas pourquoiiiiii Voilaaaa.
    Pas d'exception ou de message d'erreur ? C'est juste bloqué ?

    Tu peux faire "pause" dans le debugger pendant que c'est bloqué, et regarder sur quoi il est bloqué ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Points : 460
    Points
    460
    Par défaut
    Je me trompe peut etre mais Invoke prends en argument un object[]
    L'appel devrait donc etre le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ff.Invoke(new Form3.prog(ff.incrementer), new object[]{1});

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par antoine.debyser Voir le message
    Je me trompe peut etre mais Invoke prends en argument un object[]
    Ca prend en paramètre un params object[] (i.e. nombre variable de paramètres), donc pas la peine de créer le tableau explicitement

Discussions similaires

  1. [RCP] Treeviewer non thread-safe ?
    Par Guildux dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 09/01/2007, 13h00
  2. fonction de stdio.h thread safe ??
    Par boolzor dans le forum POSIX
    Réponses: 3
    Dernier message: 30/04/2006, 20h03
  3. Code "Thread Safe" ?
    Par Neitsa dans le forum C++
    Réponses: 3
    Dernier message: 23/12/2005, 14h33
  4. [Language]Immutable & Thread-Safe
    Par Repti dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 21/12/2005, 15h50
  5. [MFC] CMAP non thread safe ?
    Par fmarot dans le forum MFC
    Réponses: 5
    Dernier message: 04/10/2005, 13h21

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