2

所有,我有一个调用IProgress<T>.Report();来更新我的 UI 并进行相关数据选择的方法。后台线程随后通过与它一起工作的界面获取当前选择(在 UI 上)。因此,IProgress<T>.Report();在进行 UI 更新之前,调用会阻止返回,这一点很重要。MSDN没有提供有关该Report();方法这方面的信息...

在委托完成之前,该方法是否会Report();阻止返回后台线程?Report();

谢谢你的时间。

4

2 回答 2

6

不,它没有。它发布- 而不是发送 - 到同步上下文。帖子是异步的。

请注意,这是一个实现细节。我是通过阅读代码了解到的,我不知道任何有关此的官方文档。

此外,SynchronizationContext.Post应该是异步的,但不能保证是异步的。例如,在 ASP.NET 中,可以直接调用委托,即同步参考:见图 4

于 2013-01-31T12:09:45.293 回答
5

这完全取决于IProgress<T>您正在使用的实现。如果您要使用内置的Progress<T>,则Report()不要等待委托/事件处理程序完成。

您可以创建自己的实现来执行IProgress<T>您想要的操作(最有可能调用SynchronizationContext.Send())并使用它。

但我不确定这是一个好的设计,我认为你的工作代码不应该依赖于必须在 GUI 线程上进行的计算。您可能需要考虑更改您的设计。

于 2013-01-31T13:33:50.043 回答