.NET SynchronizationContext - 它发送/发布到哪个线程?
我计划使用 SynchronizationContext 类来执行一些 UI 更新的跨线程编组。 这个想法是为了避免必须引用主表单(即 Application.Run(form)
中的表单),这样我就可以说 mainForm.BeginInvoke();
但是,文档中不清楚的一件事是,当您调用 SynchronizationContext.Post()
时,它将调用编组到哪个线程。 它始终是主应用程序线程,还是首先初始化 SynchronizationContext
对象的线程,还是什么?
I'm planning on using the SynchronizationContext class to perform some cross-thread marshalling of UI updates. The idea is to avoid having to have a reference to the main form (i.e. the one in Application.Run(form)
) just so I can say mainForm.BeginInvoke();
However, one thing that isn't clear from the documentation, is that when you call SynchronizationContext.Post()
, which thread it marshalls the call to. Is it always the main application thread, or the thread that first initialised a SynchronizationContext
object, or what?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
取决于 SynchronizationContext 的类型。 当您扩展该类时,您可以在您喜欢的任何线程上(或多或少)实现方法调用。 Windows 窗体将 mashal 返回到主 ui 线程。 wpf会使用dispatcher线程等等。
Depends on the type of SynchronizationContext. when you extend the class you can implement the method invokation on any thread you like (more or less). The windows forms one will mashal back to the main ui thread. The wpf will use the dispatcher thread and so on.
啊,CodeProject 有一些有用的东西:
http://www.codeproject.com/KB/threads /SynchronizationContext.aspx
我会看一下。
更新:事实证明,当在主线程上打开第一个表单时,会为其指定一个 SynchronizationContext 对象。 send 和 post 调用被编组到此同步上下文的线程。
Ahh, CodeProject has something useful:
http://www.codeproject.com/KB/threads/SynchronizationContext.aspx
I'll take a look at that.
UPDATE: Turns out that the main thread is given a
SynchronizationContext
object when the first form is opened on it. It is this sync context's thread that the send and post calls are marshalled to.