回答
这基本上描述了一种在线程之间推动工作;要将工作项目推送到其他线程,请使用Invoke
(同步)或BeginInvoke
(异步 - 稍后稍后请拨打EndInvoke
)。同样,InvokeRequired
用于询问“我是否需要这样做?或者我可以自己执行这项工作吗?”。
此接口最常见的用法是在windows窗体中,它是如何将工作推送到UI线程的一部分;您当然可以同样使用Control.Invoke
/Control.BeginInvoke
,但表单控件实现此接口以允许抽象 - 因此下游代码无需将其自身绑定到Windows窗体。在表单的情况下,InvokeRequired
意味着“我是否是UI线程?”。
实际上,我不确定这是直接使用它的共同点。在UI上处理事件更为常见,并且使用最合适的本地机制让UI处理线程切换。
典型用法:
obj.Invoke((MethodInvoker) SomeMethod);
,其执行(通过一个代表)SomeMethod
由obj
管理的线程上(它实现接口)。
的ISynchronizeInvoke接口 提供有关 一个事件的发生的对象之间的同步和异步通信 。实现此接口的对象 可以通过 接收事件发生时有 的通知,并且他们可以响应有关该事件的查询 。这样, 客户端可以确保一个请求 已被处理之前,他们提交 后续请求,取决于 完成第一个。
另请参阅
http://blogs.msdn.com/jaredpar/archive/2008/01/07/isynchronizeinvoke-now.aspx
Yap ..我认为这可以用来更新主线程中的UI使用低层逻辑的后台线程? – 2009-09-01 06:05:17
- 1. 如何使用ISynchronizeInvoke不会对表
- 2. WPF窗口实现ISynchronizeInvoke与System.Timers.Timer一起使用
- 3. C#ISynchronizeInvoke问题
- 4. NET中的ISynchronizeInvoke
- 5. 如何使用ISynchronizeInvoke与设备进行通信?
- 6. 如何使用IObjectWithChangeTracker接口?
- 7. ISynchronizeInvoke VS SynchronizationContext与mainForm.Invoke
- 8. 如何使用接口生成器构建一个长接口
- 9. 如何随机使用接口方法?
- 10. 如何使用WCF REST公开接口?
- 11. 如何在Java中使用FileNameMap接口?
- 12. 如何在C#中使用DllImport接口?
- 13. 如何在常量中使用接口
- 14. WCF和Silverlight:如何不使用接口?
- 15. 如何使用显式接口事件?
- 16. 如何使用Emacs的DBUS接口?
- 17. 如何动态使用接口?
- 18. 如何使用接口与Telerik OpenAccess
- 19. 如何在j2me中使用Comparable接口
- 20. 如何使用流利的接口
- 21. 如何调用接口?
- 22. ASP.NET使用接口
- 23. 使用Java接口
- 24. 接口的使用
- 25. 使用ICommand接口
- 26. 使用Parcelable接口
- 27. 接口的使用
- 28. C#,使用接口
- 29. 如何直接调用接口方法?
- 30. 有谁知道如何使用多接口的端口声明?
感谢marc它的一个很好的答案.. – 2009-09-15 05:36:25
我最近查看了一个非常简单的'ISynchronizeInvoke'实现伴随着一个非常简单的'IAsyncResult'实现:http://gurkashi.blogspot.com/2011/01/hi-all-在此结果后我意志 - demonstrate.html。不喜欢这个问题,但我想知道,现在,与.Net 4.5我可以使用异步/等待,而不是回调的BeginInvoke老派模式。尽管接口说'BeginInvoke',*引擎盖下*我可以从我的4.5工具箱实现。 – IAbstract 2012-06-13 01:38:57