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

knuck18 7 Messages postés samedi 24 mai 2003Date d'inscription 23 avril 2009 Dernière intervention - 17 oct. 2008 à 17:49 - Dernière réponse : knuck18 7 Messages postés samedi 24 mai 2003Date d'inscription 23 avril 2009 Dernière intervention
- 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 

5 réponses

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

<hr />
-My Blog-
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Bidou
cs_niky 168 Messages postés jeudi 28 juin 2001Date d'inscription 18 octobre 2008 Dernière intervention - 18 oct. 2008 à 14:16
+2
Utile
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
xmox667 357 Messages postés jeudi 8 juin 2006Date d'inscription 26 décembre 2011 Dernière intervention - 19 oct. 2008 à 08:19
0
Utile
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
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 19 oct. 2008 à 16:44
0
Utile
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
knuck18 7 Messages postés samedi 24 mai 2003Date d'inscription 23 avril 2009 Dernière intervention - 20 oct. 2008 à 13:03
0
Utile
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.