Threads

Messages postés
273
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
6 février 2009
- - Dernière réponse : zebobo5
Messages postés
273
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
6 février 2009
- 7 nov. 2007 à 11:35
Salut à tous,

Soit 2 formulaire f1 et f2.

f1 est créé et affiché dans le thread principal.

On lance une méthode m1 de f1, puis le thread principal se met en WaitOne() avec un ManualResetEvent.

m1 qui crée un thread qui crée f2, et enfin un ShowDialog

Question : Comment faire pour que ce f2.ShowDialog(f1) dans m1 passe sans problèmes de thread et d'accès à f1

PS : L'application doit normalement se bloquer après le ShowDialog, mais là n'est pas le problème.

Finalement le plus simple c'est de vous mettre un bout de code test...

Code exemple :

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            ManualResetEvent mre = new ManualResetEvent(false);
            Form1 f1 = new Form1();
            f1.Text = "F1";
            f1.Load +=
                delegate
                    {
                        Thread t2 = new Thread(
                            delegate ()
                                {
                                    Form2 f2 = new Form2();
                                    f2.Text = "F2";
                                    f2.Load +=
                                        delegate
                                            {
                                                mre.Set();
                                            };
                                    f2.ShowDialog(f1);
                                });
                        t2.Start();
                        mre.WaitOne();
                    };

            Application.Run(f1);
        }
        internal class Form1 : Form
        { }
        internal class Form2 : Form
        { }

<hr />ZeBobo5
N'oubliez pas de cloturer votre post.
Afficher la suite 

3 réponses

Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Statut
Membre
Dernière intervention
18 octobre 2008
6
0
Merci
Perso, je me débrouillerai pour faire en sorte que f1 et f2 s'exécutent dans le même thread. Par exemple, en créant une méthode CreateF2 dans Form1 :

void CreateF2()
{
    // Vrai si l'appel a été fait dans un autre thread que le thread dans lequel a été créé "this"
    if (this.InvokeRequired())
    {
       this.Invoke(...); // Regarder la syntaxe dans la doc pour invoquer CreateF2.
    }
    else
    {
       f2 = new Form2();
       // ... tout le reste du code de chargement de f2
    }
}

Cordialement.
Commenter la réponse de cs_niky
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
42
0
Merci
Hello,
L'interface graphique doit être gérée dans un seul  thread, sinon c'est problèmeS en ligne de mire assurés !

<hr />
-My Blog-
Commenter la réponse de cs_Bidou
Messages postés
273
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
6 février 2009
1
0
Merci
ReBonjour,

Donc si j'ai bien compris, il faut que je fasse mon ShowDialog, voir même un Show dans mon thread principal...
Pas cool...

<hr />
ZeBobo5
Commenter la réponse de zebobo5