如何使用ISynchronizeInvoke接口?

时间:2009-09-01 05:56:13

标签: c#

ISynchronizeInvoke的工作程序是什么?

如何在C#中使用它?

2 个答案:

答案 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 Interface

  

ISynchronizeInvoke接口   提供同步和异步   对象之间的沟通   事件的发生。对象   实现这个接口可以   收到活动的通知   发生了,他们可以回应   有关该事件的查询。通过这种方式,   客户可以确保一个请求   在提交之前已经处理完毕   随后的请求取决于   完成第一次。

另请参阅

http://blogs.msdn.com/jaredpar/archive/2008/01/07/isynchronizeinvoke-now.aspx