Thread - Controls [Résolu]

Signaler
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007
-
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007
-
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

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
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#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
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#
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007

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
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007

Splendide! Merci chef

-------------------------
Trambert le vert
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007

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
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
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#
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007

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