Backgroundworker调用Dispatcher.Invoke

时间:2013-04-03 05:17:24

标签: c# backgroundworker dispatcher

我正在研究其他人编写的代码。它包含一个后台工作程序,它从DoWork调用Dispatcher.Invoke。

我的问题是我认为我的BackgroundWorkerCompleted将在Dispatcher.Invoke完成之前发生。这是对的吗?

Dispatcher.Invoke会启动一个新线程还是从主线程开始?

将Dispatcher与Backgroundworker混合是一个坏主意吗?我找到的样本似乎只使用其中一个。

1 个答案:

答案 0 :(得分:1)

  

我的问题是我认为我的BackgroundWorkerCompleted会发生   在我的Dispatcher.Invoke完成之前。这是对的吗?

不,那不正确。

  

Dispatcher.Invoke会启动一个新线程还是从主线程开始?

不,它将在UI线程上执行代码。因此,它将阻止您获得交叉线程异常。通常用于修改GUI内容。

请参阅Dispatcher.Invoke

  

在WPF中,只有创建DispatcherObject的线程才能访问   那个对象。例如,从中分离出的背景线程   主UI线程无法更新Button的内容   在UI线程上创建。为了后台线程访问   Button的Content属性,后台线程必须   将工作委托给与UI线程关联的Dispatcher 。   这是通过使用Invoke或BeginInvoke来完成的。调用是   synchronous和BeginInvoke是异步的。该操作被添加到   Dispatcher的事件队列位于指定的DispatcherPriority。