我正在研究其他人编写的代码。它包含一个后台工作程序,它从DoWork调用Dispatcher.Invoke。
我的问题是我认为我的BackgroundWorkerCompleted将在Dispatcher.Invoke完成之前发生。这是对的吗?
Dispatcher.Invoke会启动一个新线程还是从主线程开始?
将Dispatcher与Backgroundworker混合是一个坏主意吗?我找到的样本似乎只使用其中一个。
答案 0 :(得分:1)
我的问题是我认为我的BackgroundWorkerCompleted会发生 在我的Dispatcher.Invoke完成之前。这是对的吗?
不,那不正确。
Dispatcher.Invoke会启动一个新线程还是从主线程开始?
不,它将在UI线程上执行代码。因此,它将阻止您获得交叉线程异常。通常用于修改GUI内容。
在WPF中,只有创建DispatcherObject的线程才能访问 那个对象。例如,从中分离出的背景线程 主UI线程无法更新Button的内容 在UI线程上创建。为了后台线程访问 Button的Content属性,后台线程必须 将工作委托给与UI线程关联的Dispatcher 。 这是通过使用Invoke或BeginInvoke来完成的。调用是 synchronous和BeginInvoke是异步的。该操作被添加到 Dispatcher的事件队列位于指定的DispatcherPriority。