Смущает поведение Dispatcher.BeginInvoke ()

Может ли кто-нибудь пролить свет на мою проблему?

Я работаю над проектом wpf. Сценарий приведен ниже:

Мне нужно открыть окно (окно модели) в основном потоке пользовательского интерфейса, а затем закрыть его. Эти работы начинаются из другого потока пользовательского интерфейса (чтобы удержать пользователя от нажатия на главное окно пользовательского интерфейса). Затем я закрываю это окно. Основной код показан ниже. И это работает.

Насколько я знаю, метод close не будет выполняться до того, как ShowDialog () вернется (по крайней мере, так обстоит дело с потоком пользовательского интерфейса, я имею в виду код без диспетчера), кто-нибудь есть опыт работы с многопоточностью?

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

Спасибо за ваше время!

10
задан FelipeAls 22 February 2013 в 21:33
поделиться