ISynchronizeInvoke
的工作程序是什么?
如何在C#中使用它?
答案 0 :(得分:15)
这基本上描述了一种在线程之间推送工作的方法;要将一项工作推送到另一个线程,请使用Invoke
(同步)或BeginInvoke
(异步 - 理想情况下稍后调用EndInvoke
)。同样,InvokeRequired
用于询问“我是否需要这样做?或者我可以自己执行这项工作吗?”。
这个界面最常见的用途是在windows-forms中,它是如何将工作推送到UI线程的一部分;您当然可以同等地使用Control.Invoke
/ Control.BeginInvoke
,但表单控件实现此接口以允许抽象 - 因此下游代码不需要将自身绑定到窗体表单。对于表单,InvokeRequired
表示“我是UI线程吗?”。
实际上,我不确定直接使用它是否常见。处理UI上的事件更为常见,并让UI使用最合适的本地机制处理线程切换。
典型用法:
obj.Invoke((MethodInvoker) SomeMethod);
在由SomeMethod
管理的线程上执行(通过委托)obj
(实现接口)。
答案 1 :(得分:2)
ISynchronizeInvoke接口 提供同步和异步 对象之间的沟通 事件的发生。对象 实现这个接口可以 收到活动的通知 发生了,他们可以回应 有关该事件的查询。通过这种方式, 客户可以确保一个请求 在提交之前已经处理完毕 随后的请求取决于 完成第一次。
另请参阅
http://blogs.msdn.com/jaredpar/archive/2008/01/07/isynchronizeinvoke-now.aspx