Confundido por el comportamiento de Dispatcher.BeginInvoke ()

Podría alguien arrojar algo de luz sobre un problema que estoy teniend

Estoy trabajando en un proyecto de wpf. El escenario es el siguiente:

Necesito abrir una ventana (ventana de modelo) en el hilo principal de la interfaz de usuario y luego cerrarla. Estos trabajos se inician desde otro hilo de la interfaz de usuario (para disuadir al usuario de hacer clic en la ventana principal de la interfaz de usuario). Luego cierro esta ventana. El código principal se muestra a continuación. Y funciona

Por lo que sé, el método de cierre no se ejecutará antes deShowDialog() devuelve (al menos este es el caso en el subproceso de interfaz de usuario, me refiero al código sin despachador), ¿alguien tiene experiencia con subprocesos múltiples?

   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();
    }

¡Gracias por tu tiempo

Respuestas a la pregunta(2)

Su respuesta a la pregunta