同步上下文的SynchronizationContext.Post处理顺序

5
我使用 SynchronizationContext 在后台线程中调用UI线程上的方法。我阅读了这篇文章,其中询问SendPost的区别。我理解了答案,会在需要调用方法的结果继续进行时调用Send,而在不关心结果时则会调用Post
我的问题是:我能否对Post的委托被调用的顺序做出任何假设?例如,我可能会在UI线程上显示日志窗口的消息。但是,如果Post的委托没有按照它们被调用的顺序进行处理,那么消息日志也会按照错误的顺序显示消息。
我可以通过Send发送消息来解决这个问题,但我真的需要担心吗?

1
这篇文章对你来说会是一篇不错的阅读材料。你是在使用WinForms还是WPF?我认为这将取决于你正在使用的“同步上下文”实现。 - Yuval Itzchakov
感谢@YuvalItzchakov。这篇文章解释得很清楚。顺便说一下,我使用WinForms。该文章描述了一种情况,即消息会失序(在发布发送命令时)。至少在我的代码中,我将防止出现这种情况。但是我不能对每个Post调用的方法做出任何假设。也许这是糟糕的API设计,但我不觉得自己有责任。到目前为止,我认为我的问题已经解决了。再次感谢。 - Sascha
1个回答

0

根据您使用的应用程序模型,可以选择使用哪种SynchronizationContext,这将决定不同实现的行为。在this article的表格(图4)中有很好的说明。

因此,基于桌面UI的SynchronizationContext实现将保证委托的有序执行,而对于其他实现则不能保证。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接