begin process at 2010 02 09 19:07:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Process

 > 

Problème avec la gestion des thread: thread appelé deux fois seulement au lieu de 15 :(


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème avec la gestion des thread: thread appelé deux fois seulement au lieu de 15 :(

jeudi 1 mai 2008 à 14:40:33 | Problème avec la gestion des thread: thread appelé deux fois seulement au lieu de 15 :(

AmK

Bonjour,

J'ai un gros problème avec l'utilisation des thread!
En fait, ce qui se passe c'est que j'appelle un thread 15fois ! ( 15positions successives à afficher sur une map obtenue à l'aide du webservice MapPoint ). 15fois en principe, en réalité il n'est appellé que 2 fois, pour des raisons inconnues..

Je vous mets le code :

int nb_positions=0; // variable globale qui sera mise à jour à chaque cycle du threa

      private void menuItem2_Click(object sender, EventArgs e)
        {
  
             // Le thread est lancé lors de l'évenement : clic sur menuItem2
              monThread = new Thread(new ThreadStart(CallPositionsThreading));

              monThread.Start();
        }

       private void CallPositionsThreading()
        {
    
            if (nb_positions < 15)
            {
                //tant que nb_positions est <15 on continue d'appeler DoUpdate
                DoUpdate(nb_positions);
                nb_positions = nb_positions + 1;
            }

      
        }

        private delegate void CallPositionsThreadingDelegate(int nb_positions);

        private void DoUpdate(int nb_positions)
        {
            i = i + 1;
            if (this.InvokeRequired)
            {
                // we were called on a worker thread
                // marshal the call to the user interface thread
                this.Invoke(new CallPositionsThreadingDelegate(DoUpdate), new object[] { nb_positions });
                return;
            }


            menuItem1.Text = "Appel"+" "+i.ToString(); // Le compteur se bloque à 2, ce qu signifie que
             // le thread n'est appelé que deux fois


            DisplayMapFromCoordinates(DriverCarList,pictureBox2.Height, pictureBox2.Width);
    

        }

        DisplayMapFromCoordinates(...)
       {
           // Appel asynchrone vers GetMap
       } 

      private void GetMapThread(IAsyncResult state)
        {
            RenderServiceSoap rss = state.AsyncState as RenderServiceSoap;
            if (rss == null)
                return;
            MapImage[] images = rss.EndGetMap(state);
            imageStream = new System.IO.MemoryStream(images[0].MimeData.Bits);

            if (pictureBox2.InvokeRequired)
            {
                pictureBox2.Invoke(new UpdatePictureBoxDelegate(UpdatePictureBox));
            }
            else
            {
                UpdatePictureBox();
            }

        }

        private delegate void UpdatePictureBoxDelegate();

        private void UpdatePictureBox()
        {

            pictureBox2.Image = new System.Drawing.Bitmap(imageStream);

        }

A votre avis, à quoi est ce du ??

Je vous remercie pour votre aide, j'y suis dessus depuis pas mal de temps et je commence vraiment à desesperer :( ..  
jeudi 1 mai 2008 à 15:10:57 | Re : Problème avec la gestion des thread: thread appelé deux fois seulement au lieu de 15 :(

coq

Administrateur CodeS-SourceS
Salut,

Je n'ai pas vraiment compris le déroulement du code mais à vue de nez tu lances une fois, elle se rappelle elle même en changeant de contexte de thread et c'est tout.

Bref, je dirais qu'il doit manquer une boucle quelquepart, sans doute dans CallPositionsThreading si j'en juge par le commentaire "//tant que nb_positions est <15 on continue d'appeler DoUpdate"


/*
coq
MVP Visual C#
CoqBlog
*/
jeudi 1 mai 2008 à 16:06:02 | Re : Problème avec la gestion des thread: thread appelé deux fois seulement au lieu de 15 :(

AmK

A vrai dire j'avais utilisé une boucle for avant cela :

for(nb_positions=0;nbpositions<15;nb_positions++)
   DoUpdate(nb_positions);

mais le résultat était le même.

Oui le thread est appelé une fois et c'est tout.

Pour le code, desolé je confirme c'est illsible ya pas moyen d'insérer une balise snippet ici ?

Cela dit, je te fournis une explication sommaire du code :

// Création du thread et lancement de ce thread
// Après clic sur menuItem2
private void menuItem2_Click(object sender, EventArgs e)

// Appel du thread en question
private void CallPositionsThreading()


// Le thread et son delegué
private delegate void CallPositionsThreadingDelegate(int nb_positions);
private void DoUpdate(int nb_positions)  


// la méthode qui affiche la map avec mappoint
// en fait elle fait un appel asynchrone à
//  une webmethode (GetMap)
private void DisplayMapFromCoordinates(...);

// traitement asynchrone de GetMap
private void GetMapThread(IAsyncResult state)


// pour l'affichage de la map sur une picturebox
private delegate void UpdatePictureBoxDelegate();

private void UpdatePictureBox()

Donc en gros ya deux thread dans mon code.A savoir qu'un premier thread est lancé et que ce
thread va lui même lancer un autre thread ( du moins avec un appel asynchrone de webservice).

Merci beaucoup :)  

jeudi 1 mai 2008 à 16:27:10 | Re : Problème avec la gestion des thread: thread appelé deux fois seulement au lieu de 15 :(

coq

Administrateur CodeS-SourceS
heu, i se trouve où ?



/*
coq
MVP Visual C#
CoqBlog
*/
jeudi 1 mai 2008 à 17:32:19 | Re : Problème avec la gestion des thread: thread appelé deux fois seulement au lieu de 15 :(

AmK

i, variable globale initialisée à 0.  
jeudi 1 mai 2008 à 17:39:42 | Re : Problème avec la gestion des thread: thread appelé deux fois seulement au lieu de 15 :(

coq

Administrateur CodeS-SourceS
Sauf si un autre thread joue avec la valeur de i, la seule raison serait un échec dans DisplayMapFromCoordinates entrainant l'arrêt du thread dès le premier appel (la position de l'incrémentation de i faisant en sorte qu'en cas d'Invoke, il est incrémenté 2 fois pour un seul appel de DisplayMapFromCoordinates).



/*
coq
MVP Visual C#
CoqBlog
*/
jeudi 1 mai 2008 à 17:52:33 | Re : Problème avec la gestion des thread: thread appelé deux fois seulement au lieu de 15 :(

AmK


Cet échec surviendrait donc lors du deuxième appel?
Curieux, pourtant chaque appel est similaire au premier, il n'y a que la position à afficher qui change, je vois vraiment où est ce que ça pourrait clocher :(.

Merci pour ton aide :)  
jeudi 1 mai 2008 à 18:06:20 | Re : Problème avec la gestion des thread: thread appelé deux fois seulement au lieu de 15 :(

coq

Administrateur CodeS-SourceS
Non, dès le premier.



/*
coq
MVP Visual C#
CoqBlog
*/
jeudi 1 mai 2008 à 18:16:26 | Re : Problème avec la gestion des thread: thread appelé deux fois seulement au lieu de 15 :(

AmK

Mmm très bien merci !
Reste à savoir pourquoi.. je vais m'y pencher..   
jeudi 1 mai 2008 à 18:24:08 | Re : Problème avec la gestion des thread: thread appelé deux fois seulement au lieu de 15 :(

coq

Administrateur CodeS-SourceS
Bon courage.



/*
coq
MVP Visual C#
CoqBlog
*/


Cette discussion est classée dans : private, void, thread, nb, positions


Répondre à ce message

Sujets en rapport avec ce message

[C#] Problème de Thread [ par leodrel56 ] Bonsoir à tous !!!Voilà je me suis mis au C# ce matin et je rencontre quelques petits soucis, voilà premièrement dans mon pseudo programme j'initialis Appli qui tourne normal sur Visual Studio 2005, et plante quand je lance l'exe seul [ par duteux ] Bonjour à tous, J'ai ecrit une application Windows en C# qui parcour les fichiers *.eml pour en extraire toutes les adresses mails présentes. Quand Thread mon programme plante :( [ par badrbadr ] Salut tout le monde,Je suis en train de travailler sur une application qui prend des captures d'écran de pages web. J'utilise pour cela le contrôle We Operation interThread non valide : utilisation des delegates [ par Zaltez ] Bonsoir,J'aurai besoin d'un précision sur l'utilisation des delegates en c#.j'utilise les delegates pour rafraichir l'avancement du progressbar de cet Problème D'impression [ par maxdesu ] bonjour a tous j'ai un probleme d' impression desolé car il y a des autres sujets que j'ai deja aperçu dont celui la http://www.csharpfr.com/codes/TUT Unhandled Thread Exception [ par Lutinore ] Salut..protected override void OnClick( EventArgs e ) // Click sur une forme.{    //base.OnClick( e );     try    {        Thread t = new Thread( ne Problème. [ par Xynablue ] Bonjour, alors voilà, je fait un programme qui permet à l'utilisateur de calculer le temps qu'il passe à travailler avec ses clients, ainsi que la pos Problème lors de l'ajout de données [ par juninho2lyon ] Bonjourje suis en train de créer une application en C# utilisant une base de données Access.Or quand je clique sur le bouton "ajouter", j'ai l'erreur positionnement des composants dans un list view [ par adsana ] salutqu'elq'un a une idée comment je peut modifier ce code à fin que j'arrive à positionner   librement mes composants dans ma list view et non pas da deposer des elements dans list view [ par adsana ] salutqu'elq'un a une idée comment je peut modifier ce code à fin que j'arrive à positionner   librement mes composants dans ma list view et non pas da


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales