Thread modifiant un control dans une form

Le
Jérôme PINNEAU
Bonjour,

J'ai une form qui lance un thread (c'est un chat). Le thread doit accéder au
texbox pour modifier le texte.
Lorsque je lance, j'ai un message disant que le thread a tenté d'accéder a
un control de la form, mais .
Il le refuse.
Comment puis-j y accéder ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
gptvitsion
Le #16598961
"Jérôme PINNEAU"
Bonjour,

J'ai une form qui lance un thread (c'est un chat). Le thread doit accéder
au texbox pour modifier le texte.
Lorsque je lance, j'ai un message disant que le thread a tenté d'accéder a
un control de la form, mais ....
Il le refuse.
Comment puis-j y accéder ?



Bonjour

sous VB.net j'ai utilisé la ligne suivante dans la méthode Form Load :
Control.CheckForIllegalCrossThreadCalls = False
Je pense qu'il doit exister la même chose pour C#.
Par contre la MSDN dit qu'il faut être prudent avec cette méthode.

Cordialement
Philippe
Delf
Le #16599721
On 21 août, 17:38, Jérôme PINNEAU
J'ai une form qui lance un thread (c'est un chat). Le thread doit accéd er au
texbox pour modifier le texte.
Lorsque je lance, j'ai un message disant que le thread a tenté d'accé der a
un control de la form, mais ....
Il le refuse.
Comment puis-j y accéder ?



Dans certains cas, ça peut fonctionner, souvent, une exception est
levée.

Le problème en fait est que le thread que tu lances ne devrait pas
accéder à un controle graphique.
Afin d'éviter cette erreur dans du WinForm, je te conseillerais de
passer par des delegates pour manipuler tes contrôles de manière
threadée.

Voici un lien expliquant la méthode :

http://www.yoda.arachsys.com/csharp/threads/winforms.shtml

Bonne chance, c'est un peu chiant.

--
Delf
d
Le #16660811
Tu peux essayer ça

//Déclaration
private delegate void InvokeMyControls();

//Dans le Thread
this.Invoke(new InvokeMyControls(ActionSurMesControls));

//Création de la fonction
private void ActionSurMesControls()
{
//Mes Contrôles
Textbox1.Text = laChaine;

}

Sinon si le message est dans le Thread alors
//Déclaration
private delegate void InvokeMyControls(string lachaine1, string lachaine2);

//Dans le Thread
{
string str1="1";
string str2="2";
this.Invoke(new InvokeMyControls(ActionSurMesControls),str1,str2);
}
//Création de la fonction
private void ActionSurMesControls(string strchaine1, string strchaine2)
{
//Mes Contrôles
Textbox1.Text = strchaine1;
Textbox2.Text = strchaine2;
}

Voilà.

David L
"Jérôme PINNEAU" news:
Bonjour,

J'ai une form qui lance un thread (c'est un chat). Le thread doit accéder


au
texbox pour modifier le texte.
Lorsque je lance, j'ai un message disant que le thread a tenté d'accéder a
un control de la form, mais ....
Il le refuse.
Comment puis-j y accéder ?



Publicité
Poster une réponse
Anonyme