回答
這基本上描述了一種在線程之間推動工作;要將工作項目推送到其他線程,請使用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