Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Thread modifiant un control dans une form

3 réponses
Avatar
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 ?

3 réponses

Avatar
gptvitsion
"Jérôme PINNEAU" <@wanadoo.fr> a écrit dans le message de 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 ?



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
Avatar
Delf
On 21 août, 17:38, Jérôme PINNEAU <@wanadoo.fr> wrote:

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
Avatar
d
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" <@wanadoo.fr> a écrit dans le message de
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 ?