Comment ouvrir un formulaire dans un thread et le forcer à rester ouvert

Je suis toujours avoir des problèmes à trouver comment créer des winforms dans un autre thread d'INTERFACE utilisateur qui j'ai discuté ici.

En essayant de comprendre ce que j'ai écrit la suite de programme de test simple. Je veux simplement ouvrir un formulaire sur un thread séparé nommé "thread d'INTERFACE utilisateur" et de garder le thread en cours d'exécution tant que le formulaire est ouvert, tout en permettant à l'utilisateur d'interagir avec le formulaire (filage est de la triche). Je comprends pourquoi le ci-dessous échoue et le fil se ferme immédiatement, mais je suis pas sûr de ce que je dois faire pour résoudre le problème.

using System;
using System.Windows.Forms;
using System.Threading;

namespace UIThreadMarshalling {
    static class Program {
        [STAThread]
        static void Main() {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            var tt = new ThreadTest();
            ThreadStart ts = new ThreadStart(tt.StartUiThread);
            Thread t = new Thread(ts);
            t.Name = "UI Thread";
            t.Start();
            Thread.Sleep(new TimeSpan(0, 0, 10));
        }

    }

    public class ThreadTest {
        Form _form;
        public ThreadTest() {
        }

        public void StartUiThread() {
            _form = new Form1();
            _form.Show();
        }
    }
}
Yep, c'est juste de Microsoft à défaut de bien réfléchir à autre chose qu'une boîte de dialogue unique et seul thread une fois de plus. Comme les solutions ci-dessous vous dis que vous pouvez commencer un message séparé de la pompe, mais il n'existe aucun moyen pratique de lancer ce à partir du thread GUI, donc il n'y a aucun moyen de faire la deuxième forme se comporter comme un dialogue non modale.
Pour être juste, la question est de savoir à partir de 4 ans et portant sur une période de 12 ans de la technologie 🙂
Ouais je sais, mais mis à part le fait que même il y a 12 ans les gens voulaient, et ce, sans même le regarder, j'va miser une grosse somme que la situation n'a pas changé dans la révision/les nouvelles API de MME
Je ne pense pas que c'est juste, je n'ai jamais eu trop profondément dans WPF, mais ce que j'ai fait, ne semblent pas souffrir de ces problèmes (et dans beaucoup de façons, WPF a été une plus grande maturité de l'INTERFACE utilisateur de la technologie que de l'HTML). Le nouveau javascript Isu je pense que travailler sur un nœud de style boucle d'événements, donc je ne pense pas que le thread d'interface utilisateur est même un problème. Pour tous ses nombreux défauts, Microsoft ne mérite un certain crédit pour la façon dont ses outils de dev ont évolué.

OriginalL'auteur George Mauer | 2008-10-03