2
我對WPF比較陌生。我檢查了一些代碼,看起來像這樣:關於從同一個線程調用WPF Dispatcher.BeginInvoke的問題!爲什麼?
private void button_Click(object sender, RoutedEventArgs e)
{
//Queue on dispatcher in the background so it doesn't make the UI slow
Dispatcher.BeginInvoke(new dMyDelegate(PerformOperation), DispatcherPriority.Background);
}
從評論,我猜的原代碼認爲這是必要的,使用戶界面更加敏感,但是,我的理解是,Dispatcher.BeginInvoke只需在UI線程上運行一些東西。由於buttn_Click已經在UI線程上,這有什麼意義?也許我誤解了Dispatcher和BeginInvoke。我在這裏假設Dispatcher是這個方法所在類的調度器,它是MainWindow.xaml。有人能夠啓發我嗎?
感謝
啊。我沒有專注於第二個參數。這就說得通了。 「PerformOperation」將在所有正常優先級事件後被調用。在代碼中的其他地方,他們還將「背景」稱爲BeginInvoke,並且不涉及讓GUI首先重繪。你碰巧知道屏幕重繪的水平是什麼?那是如果我用MSWord阻止和解除應用程序或最小化和最大化?是「正常」還是更高?最後,似乎一旦PerformOperation開始,GUI被鎖定?正確? – Dave 2010-09-17 19:53:02
@Andrew:恐怕我不知道優先級......但是,一旦PerformOperation啓動,調度程序線程將被鎖定。我相信這裏有一個單獨的渲染線程,可以避免出現空白屏幕,但我對這裏的細節知之甚少。 – 2010-09-17 20:23:47
謝謝!標記爲答案。 – Dave 2010-09-19 14:13:33