Thread - Controls

Résolu
bucherb Messages postés 412 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 13 août 2007 - 1 févr. 2005 à 09:51
bucherb Messages postés 412 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 13 août 2007 - 1 févr. 2005 à 12:48
Hello!

J'ai un petit problème.. Je souhaite créer un control dans un Thread séparé du Thread principal... Comment est-ce que je peux faire pour éviter l'ArgumentException "Controls created on one thread cannot be parented to a control on a different thread."

Help

-------------------------
Trambert le vert

7 réponses

cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
1 févr. 2005 à 11:20
en gros :


private delegate void AddTextBoxDelegate ( Point tbLocation, string tbText, string tbName);

private Thread m_thread;
private ThreadStart m_threadStart;
private AddTextBoxDelegate m_addTxtBoxDelegate;

private void button2_Click(object sender, System.EventArgs e)
{
// va mieux dans le constructeur, mais plus pratique de mettre là pour le c/c ;-)
m_addTxtBoxDelegate = new AddTextBoxDelegate(AddTextBox);
m_threadStart = new ThreadStart(ThreadProc);
m_thread = new Thread(m_threadStart);

m_thread.Start();
}

private void ThreadProc()
{
object[] args = new object[]{
new Point(10, 10),
"test",
"txtBox"
};
this.Invoke(m_addTxtBoxDelegate, args);
}

private void AddTextBox ( Point tbLocation, string tbText, string tbName )
{
TextBox txtBox = new TextBox();
txtBox.Location = tbLocation;
txtBox.Text = tbText;
txtBox.Name = tbName;
this.Controls.Add(txtBox);
}

Cocoricoooooooo !!!!
coq
MVP Visual C#
3
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
1 févr. 2005 à 11:13
Par la même méthode que pour l'accès aux objets : delegate et création du controle dans la methode "associée"

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
bucherb Messages postés 412 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 13 août 2007
1 févr. 2005 à 11:26
C'est bizarre parce que j'utilise déjà un délégué au travers d'un évenement... Bah j'vais regarder ça, c'est pas géré pareil.

-------------------------
Trambert le vert
0
bucherb Messages postés 412 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 13 août 2007
1 févr. 2005 à 11:30
Splendide! Merci chef

-------------------------
Trambert le vert
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bucherb Messages postés 412 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 13 août 2007
1 févr. 2005 à 12:18
Bon en fait non le problème est pas résolu...

Le bug maintnant, c'est que le control reste synchronisé sur le 2ème Thread.. Donc il répond plus

-------------------------
Trambert le vert
0
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
1 févr. 2005 à 12:43
euh, j'ai essayer et je peux saisir du texte comme je veux.
Tu peux donner plus de détails/code stp ?

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
bucherb Messages postés 412 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 13 août 2007
1 févr. 2005 à 12:48
En fait c'est un petit peu plus compliqué qu'un textbox, c'est une histoire de TabPage dans un TabControl... Tout les tabs sont controlés par le Thread principal, sauf celui que j'ai créé avec le deuxième.. Et comme le deuxième Thread c'est une boucle infinie, il n'a pas le temps de laisser la main sur le control. A moins de mettre des "Application.DoEvents()" partout, mais là je perd toute la logique de mon code..

Mais j'ai trouvé la solution, j'ai abandoné les Threads et je passe tout par des délégués asynchrones. De plus je fais exécuter mon code par le Thread principal en utilisant ta méthode, du coup ça fonctionne lol.

Merci
-------------------------
Trambert le vert
0