如何使用ISynchronizeInvoke接口?

ISynchronizeInvoke的工作过程是ISynchronizeInvoke

如何在C#中使用它?

这基本上描述了一种在线程之间推送工作的方法; 要将一项工作推送到另一个线程,请使用Invoke (同步)或BeginInvoke (异步 – 最好在以后调用EndInvoke )。 同样, InvokeRequired用于询问“我需要这样做吗?还是我可以自己执行这项工作?”。

这个界面最常见的用途是在windows-forms中,它是如何将工作推送到UI线程的一部分; 您当然可以同样使用Control.Invoke / Control.BeginInvoke ,但表单控件实现此接口以允许抽象 – 因此下游代码不需要将自身绑定到Windows窗体。 在表单的情况下, InvokeRequired意味着“我是UI线程吗?”。

实际上,我不确定直接使用它是否常见。 在UI上处理事件更常见,并且UI使用最合适的本地机制处理线程切换。

典型用法:

 obj.Invoke((MethodInvoker) SomeMethod); 

它在obj管理的线程上执行(通过委托) SomeMethod (实现接口)。

ISynchronizeInvoke接口

ISynchronizeInvoke接口提供有关事件发生的对象之间的同步和异步通信。 实现此接口的对象可以接收事件已发生的通知,并且可以响应有关该事件的查询。 通过这种方式,客户端可以确保在提交取决于第一个请求完成的后续请求之前已处理了一个请求。

还请参考

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