.NET中的ISynchronizeInvoke

NHa*_*ans 0 .net

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

Jon*_*eet 9

它只是一个包含适当方法的接口:

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

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

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

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

重要的是要注意它 ISynchronizeInvoke已经过时了.该 SynchronizationContext抽象是更普遍.Control不仅仅是最常见的实施方式; 它是唯一的微软之一.

  • 重要的是要注意`ISynchronizeInvoke`*已过时*.`SynchronizationContext`抽象更普遍.`Control`不仅仅是最常见的实现; 它是*唯一*微软的. (4认同)