的行爲困惑有人可以解釋我遇到的問題嗎?Dispatcher.BeginInvoke()
我正在做一個wpf項目。場景如下:
我需要在主UI線程上彈出一個窗口(模型窗口),然後關閉它。這些作品從另一個UI線程開始(以阻止用戶單擊主UI窗口),然後關閉此窗口。主代碼顯示在下面。它的工作原理。
據我所知在ShowDialog()
返回(至少這是在UI線程的情況下,我的意思是沒有調度程序的代碼)之前,close方法不會得到執行,有沒有人有多線程的經驗?
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();
}
謝謝你的時間!
謝謝你的解釋,這真的有助於理解它是如何工作的!我實際上看了一下showdialog代碼,但是有一些難以理解的東西,比如ComponentDispatcher.PushModal,我把它們放在波紋管中,請你幫我看一下它? – xiaoheixiaojie 2011-05-10 06:33:05