解释在.NET中的跨线程调用中使用ISynchronizeInvoke吗?
答案 0 :(得分:9)
这只是一个包含适当方法的界面:
InvokeRequired
)Invoke
)BeginInvoke
可以与EndInvoke
结合以稍后检索结果)最常见的实现是Windows窗体中的Control
。
基本上问题是在任意线程中访问UI元素是不安全的。这些机制允许相对容易地在线程之间编组调用。只需将自己绑定到ISynchronizeInvoke
而不是Control
,就可以避免业务类与UI紧密耦合。
编辑:斯蒂芬从下面的评论值得重复:
重要的是要注意到这一点
ISynchronizeInvoke
已过时。该SynchronizationContext
抽象是 更普遍。Control
不仅仅是 最常见的 实施;这是唯一的 微软一个。