Modification d'un labelText depuis une thread [Résolu]

Messages postés
7
Date d'inscription
samedi 24 mai 2003
Dernière intervention
23 avril 2009
- 17 oct. 2008 à 17:49 - Dernière réponse :
Messages postés
7
Date d'inscription
samedi 24 mai 2003
Dernière intervention
23 avril 2009
- 20 oct. 2008 à 13:03
Bonjour à tous,

J'ai une interface graphique sur laquelle j'ai un labelText.
J'exécute un Thread qui, après chargements de valeurs, doit modifier mon labelText.

L'erreur est la suivante :
Opération inter-threads non valide : le contrôle 'latestVersion' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.

Quelle est la meilleure solution d'après vous pour régler ce problème ??

Merci ;)
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
- 18 oct. 2008 à 18:09
3
Merci
Bonsoir,
Exemple complet et détaillé ici:
http://www.csharpfr.com/tutorial.aspx?ID=174

<hr />
-My Blog-

Merci cs_Bidou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_Bidou
Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Dernière intervention
18 octobre 2008
- 18 oct. 2008 à 14:16
2
Merci
Salut,

Depuis le framework 2, les opérations inter thread sur les éléments graphiques sont déconseillés et génèrent par défaut une exception en mode debug.
Tu as deux solutions pour mettre à jour ton interface graphique à partir d'un thread :
- Passer par la méthode Invoke présente sur tous les composants graphiques. Le pattern ressemble à ça :

void MonThread()
{
   /* ... */
   UpdateLabel("Hello World");
   /* ... */
}

delegatevoid UpdateLabelDelegate(string text);

void UpdateLabel(string value)
{
  if (labelText.InvokeRequired)
    labelText.Invoke(new UpdateLabelDelegate(UpdateLabel),
                              new object[] { value });
  else
    labelText.Text = value;
}

- Sinon, le plus simple est encore de passer par un BackgroundWorker pour la gestion du thread. L'événement ReportProgress du BackgroundWorker étant toujours appelé dans le thread principal de l'application.
Commenter la réponse de cs_niky
Messages postés
357
Date d'inscription
jeudi 8 juin 2006
Dernière intervention
26 décembre 2011
- 19 oct. 2008 à 08:19
0
Merci
Salut,
Çà me rappelle des souvenirs. J'avais une application "multi-threadé" sous vs 2003 après passage sous vs 2005 :
Invalid Cross Thread Operation.
A+
Commenter la réponse de xmox667
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 19 oct. 2008 à 16:44
0
Merci
Salut,

Juste un petit éclaircissement sur le message de niky : "Depuis le framework 2, les opérations inter thread sur les éléments graphiques sont déconseillés et génèrent par défaut une exception en mode debug."
Attention, dans les versions précédentes de .NET aussi c'était déconseillé : la différence réside principalement comme niky l'a dit dans l'existance d'assistant de debug qui lancent cette notification.

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
Messages postés
7
Date d'inscription
samedi 24 mai 2003
Dernière intervention
23 avril 2009
- 20 oct. 2008 à 13:03
0
Merci
Oki merci à vous !
Problème résolu ;)
Commenter la réponse de knuck18

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.