Plusieurs Threads UI - Winforms

Je veux créer plusieurs threads UI dans mon application. J'ai simulé le scénario ci-dessous. Je suis en création d'une nouvelle fenêtre /forme sur un bouton de la souris dans un fond fil

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var thread = new Thread(() =>
            {
                Form f = new Form();
                Application.Run(f);
            });

            //thread.IsBackground = true; -- Not required. See Solution below
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
        }
    }  
}

Remarque que je suis en train de faire IsBackground = true parce que lorsque l'utilisateur ferme sur le formulaire principal, l'enfant forme/windows devrait également fermer. Est-il plus propre/gracieuse façon d'obtenir les mêmes ?

EDIT - je veux créer dédié threads UI pour chaque fenêtre. Je vais
10 windows affichage en temps réel des données en parallèle.

Solution - Est-ce bien ? (comme par msdn et Hans commentaires ci-dessous)
ont mis l'Appartement de l'état (voir le code ci-dessus)

protected override void OnClosed(EventArgs e)
{
    Application.Exit();
}
Pourquoi ne pas simplement utiliser un arrière-plan de travail? Vous ne devriez pas garder les formes que vous avez affiché après que votre application principale a été fermée, c'est juste pénible.
Pourquoi avez-vous encore besoin d'un autre thread? Il suffit de créer le formulaire sur le thread principal, puis appeler f.Show().
Il y a plusieurs façons de contourner cela. Cependant, comme @Ramhound déjà mentionné, vous avez probablement envie de prendre un coup d'oeil à BackgroundWorker, parce qu'il l'ait quelques beaux événements. - Une solution de rechange pourrait être Task.
svick - je veux créer dédié threads UI pour chaque fenêtre. Je vais avoir 10 windows affichage en temps réel des données en parallèle.
Assez rare d'avoir une machine avec 10 coeurs de cpu. Thread Appelant.SetApartmentState() est nécessaire. Si vous voulez arrêter proprement, alors vous aurez à stocker les formulaires dans une Liste<>, de sorte que vous pouvez f.Invoke() un appel à Candidature.Exit(). L'affichage des fenêtres sur plusieurs threads n'est presque jamais pas une erreur. Les fenêtres n'ont pas de Z-ordre de la relation et de façon arbitraire disparaître derrière la fenêtre d'une autre application.

OriginalL'auteur Angshuman Agarwal | 2011-09-27