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