后台工作者调用Dispatcher.Invoke



我正在处理其他人编写的代码。它包含一个后台worker,从它的DoWork调用Dispatcher.Invoke.

我的问题是,我认为我的BackgroundWorkerCompleted将发生在我的Dispatcher之前。调用完成。对吗?

将调度程序。调用启动一个新线程还是在主线程上启动?

混合Dispatcher和Backgroundworker是不是一个坏主意?我找到的样本似乎只使用了其中一种。

我的问题是,我认为我的BackgroundWorkerCompleted将发生在我的调度员面前。调用完成。对吗?

不,那是不对的。

将调度程序。调用启动一个新线程还是在主线程上启动?

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

看到调度员。调用

在WPF中,只有创建DispatcherObject的线程可以访问该对象。例如,从派生出的后台线程主UI线程不能更新Button的内容在UI线程上创建的。以便后台线程访问按钮的Content属性,后台线程必须将工作委托给与UI线程相关联的Dispatcher。这可以通过使用Invoke或BeginInvoke来实现。调用的是而BeginInvoke是异步的。完成操作的添加Dispatcher在指定DispatcherPriority的事件队列。

最新更新