Threads

Signaler
Messages postés
273
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
6 février 2009
-
Messages postés
273
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
6 février 2009
-
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.

3 réponses

Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Statut
Membre
Dernière intervention
18 octobre 2008
6
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.
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
48
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-
Messages postés
273
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
6 février 2009
1
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