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..
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..
Heureux est l'étudiant qui, comme la rivière, arrive à suivre son cours sans sortir de son lit........
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.
Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.
Bonnes pratiques pour les accès aux données
Débogage efficace en .NET
LINQ to Objects : l'envers du décor
Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter
le delegate ca parle a quelqu'un...il parait que ca peut m'aider?
Heureux est l'étudiant qui, comme la rivière, arrive à suivre son cours sans sortir de son lit........
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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:monObjectDansLeThread.SuperEvent += new ClassDE_monObjectDansLeThread.SuperEventHandler(MaSuperMethode)
et le code de ta methode doit ressembler à ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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é....
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager