Troublé par le comportement de Répartiteur.BeginInvoke()

Quelqu'un pourrait jeter de la lumière sur un problème que je vais avoir?

Je suis en train de travailler sur un projet wpf. Le scénario est comme ci-dessous:

J'ai besoin pour faire apparaître une fenêtre(la fenêtre modèle) sur la thread de l'INTERFACE utilisateur, puis le fermer. Ces travaux sont démarrés à partir d'un autre thread d'INTERFACE utilisateur (pour dissuader les utilisateurs de cliquer sur l'INTERFACE principale de la fenêtre.) puis-je fermer cette fenêtre. Le code principal sont affichés ci-dessous. Et il fonctionne.

Autant que je sache, la méthode close serait pas exécutée avant ShowDialog() retourne (au moins c'est le cas sur le thread de l'INTERFACE utilisateur, je veux dire le code sans répartiteur), quelqu'un a une expérience avec multithread?

   Window window;
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Thread thread = new Thread(() =>
           {


              //create a window and let user work from this thread

             //code is omitted.



               //create another window on main UI thread

              Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                {
                    window = new Window();
                    window.ShowDialog();
                }));



               //do some work here

               Thread.Sleep(1000);

               Application.Current.Dispatcher.BeginInvoke(new Action(() =>
               {
                   //Thread.Sleep(1000);
                   window.Close();
               }));
           });

        thread.Start();
    }

Merci pour votre temps!

OriginalL'auteur xiaoheixiaojie | 2011-05-03