bonjour;
j'ai une form est un thread qui tourne et je veux depuis ce thread modifier le text d'une textbox.
comment dois je faire? la textbox n'est pas vu par mon thread?
merci d'avance..
Version imprimable
bonjour;
j'ai une form est un thread qui tourne et je veux depuis ce thread modifier le text d'une textbox.
comment dois je faire? la textbox n'est pas vu par mon thread?
merci d'avance..
Je te conseillerai d'utiliser un event.
Le form pourrait observer cet event ainsi nulle besoin pour ton thread de connaitre le form.
Pense à utiliser un call back pour la modification du textbox.
Tu peux aussi créer une méthode publique dans ton formulaire qui affecte le texte du textbox, et appeler cette méthode depuis un autre thread en utilisant la méthode Invoke.
le delegate ca parle a quelqu'un...il parait que ca peut m'aider?
Bon alors,
dans ton thread, tu déclares un event et le delegate qui va avec.
Pour l'écouter dans ton form, t'as besoin d'une méthode dont la signature correspond à celle du delegate plus haut:Code:
1
2
3 public delegate void SuperEventHandler(string argu, int trop, object bien...); public event SuperEventHandler SuperEvent;
Puis tu "enregistres" ton form comme observateur de l'event:Code:
1
2 public void MaSuperMethode(string argu, int trop, object bien...)
Avec ça, ça aurait pu marcher, mais l'accès aux forms n'est pas ThreadSafe. Donc il te faut un autre delegate avec la même signature, dans ton form:Citation:
monObjectDansLeThread.SuperEvent += new ClassDE_monObjectDansLeThread.SuperEventHandler(MaSuperMethode)
et le code de ta methode doit ressembler à ça:Code:public delegate void SuperEventHandler_DeMonForm(string argu, int trop, object bien...);
Avec ça oublie pas quand même de lancer l'évenement au moment opportun.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 public void MaSuperMethode(string argu, int trop, object bien...) { if (MaTextBox.InvokeRequired) { SuperEventHandler_DeMaForm seh = new SuperEventHandler_DeMonForm(MaSuperMethode); MaTextBox.Invoke(seh , (new object[] { argu, trop, bien ...})); } else { //Execute ce que tu veux } }
Voilà, tu vois, c'est pas si compliqué.... :aie: