我对WPF比较陌生。我正在检查一些看起来像这样的代码:
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);
}
从评论中,我猜测原始代码认为这对于使UI更具响应性是必要的,但是,我的理解是Dispatcher.BeginInvoke只是在UI线程上运行某些东西。由于buttn_Click已经在UI线程上,有什么意义呢?也许我误解了Dispatcher和BeginInvoke。在这种情况下,我假设Dispatcher是此方法所在的类所拥有的调度程序,即MainWindow.xaml。有人可以开导我吗?
由于
答案 0 :(得分:5)
嗯,它要求“后台”优先级,所以只有在处理了更重要的事件时它才会被执行...如果这是大屏幕刷新的一部分,它将有效地等到所有这一切在执行之前已经发生了即便如此,如果它将进行长时间运行(或进行任何潜在的阻塞调用),那么你是对的,它根本不应该在UI线程上运行。