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 :( ..