理解SynchronizationContext

SynchronizationContext 类是一个基类,可提供不带同步的自由线程上下文。 此类实现的同步模型的目的是使公共语言运行库内部的异步/同步操作能够针对不同的异步模型采取正确的行为。此模型还简化了托管应用程序为在不同的同步环境下正常工作而必须遵循的一些要求。同步模型的提供程序可以扩展此类并为这些方法提供自己的实现。(来自MSDN)

简而言之就是允许一个线程和另外一个线程进行通讯,SynchronizationContext在通讯中充当传输者的角色。另外这里有个地方需要清楚的,不是每个线程都附加SynchronizationContext这个对象,只有UI线程是一直拥有的。

如果一个线程存在一个UI对象,即在这个线程上创建了一个UI对象的实例,这个线程SynchronizationContext将存在。如果从未在这个线程上创建UI对象,这个线程上将不会存在SynchronizationContext对象。


使用SynchronizationContext

下面是一个使用SynchronizationContext的实例:


实例采用的是委托的BeginInvoke和EndInvoke来异步调用。这里采用的一个系统委托Action<T>。Post方法MSDN里的说明为:将异步消息调度到一个同步上下文,跟踪得知UPdateUI方法是在UI线程上执行的。

推荐文章:http://www.cnblogs.com/Kevin-moon/archive/2009/01/16/1376812.html

posted @ 2010-10-19 13:47  肖渊  阅读(337)  评论(0)    收藏  举报