.NET中的ISynchronizeInvoke

时间:2010-08-03 16:53:26

标签: .net

解释在.NET中的跨线程调用中使用ISynchronizeInvoke吗?

1 个答案:

答案 0 :(得分:9)

这只是一个包含适当方法的界面:

  • 检查是否需要特殊处理(InvokeRequired
  • 从另一个线程安全地调用委托,阻塞直到操作完成(Invoke
  • 从另一个线程安全地调用委托,立即返回而不会阻塞(BeginInvoke可以与EndInvoke结合以稍后检索结果)

最常见的实现是Windows窗体中的Control

基本上问题是在任意线程中访问UI元素是不安全的。这些机制允许相对容易地在线程之间编组调用。只需将自己绑定到ISynchronizeInvoke而不是Control,就可以避免业​​务类与UI紧密耦合。

编辑:斯蒂芬从下面的评论值得重复:

  

重要的是要注意到这一点   ISynchronizeInvoke已过时。该   SynchronizationContext抽象是   更普遍。 Control不仅仅是   最常见的   实施;这是唯一的   微软一个。