我有一個窗口顯示多個工作線程的結果,但我的工作線程應該沒有中斷(幾乎),所以我想發佈我的通知數據到主窗口,我目前使用BeginInvoke
,但它有一個問題!我應該撥打EndInvoke
但是在哪裏?我應該創建另一個線程來處理這個問題?另一種選擇是直接使用PostMessage
,但由於我正在學習使用.NET
,我更喜歡.NET
解決方案,而不是平臺調用(如果可用)。那麼我應該怎麼做,以便將某些內容發佈到主線程而不會阻塞我的工作線程?C#和Windows窗體中是否有與PostMessage對應的東西?
1
A
回答
7
您應該簡單地使用BeginInvoke
,這是發佈消息的直接等價物。除非您對返回值感興趣,否則根本不需要撥打EndInvoke
。
如果你是感興趣的返回值,則回答「我在哪裏卡恩EndInvoke
」是一種很明顯的:把它在最後一刻,你才能繼續需要返回值前。
+2
請注意,不需要爲相應的'BeginXXX'調用'EndXXX'的請求是['BeginInvoke'和'EndInvoke']的特例(http://msdn.microsoft.com/zh-cn/library/ 0b1bf3y3.aspx#remarksToggle)。除非文檔另有說明,否則你必須調用相應的'EndXXX'。例如來自[Stream.BeginRead](http://msdn.microsoft.com/en-us/library/system.io.stream.beginread.aspx#remarksToggle)*「每次調用BeginRead時都必須調用一次EndRead。您可以通過使用與BeginRead相同的代碼或傳遞給BeginRead的回調來執行此操作。「* –
相關問題
- 1. 有沒有像Windows窗體應用程序共享對象的東西?
- 2. 我們是否有與Golang中的Java和C#對象相同的東西?
- 3. 在Windows窗體中移動時最大化的東西 - C#
- 4. 在Windows應用程序中是否有類似SESSION的東西?
- 5. 在C#/ UWP中是否有與UIImageRenderingModeAlwaysTemplate等價的東西?
- 6. C++中是否有與`instancetype`等價的東西?
- 7. 在Windows Store應用程序中是否有與AffectsRender類似的東西?
- 8. 在cocos2d中,是否有與onEnter和onExit並列的東西?
- 9. 在C++(或C++ 11)中是否有類似於c#的東西?
- 10. 是否有與Windows窗體會話類似的對象
- 11. 有沒有辦法在Windows窗體中的WebBrowser中輸入東西?
- 12. 對於多項,是否有與'line-mode`和`char-mode`(ansi-term)等價的東西?
- 13. 是否有與Qt框架中的Swing CardLayout等價的東西?
- 14. SQLAlchemy中是否有與django的管理者相當的東西?
- 15. Elasticsearch中是否有與solr的UpdateRequestProcessor等價的東西?
- 16. 在Ruby/Rails中是否有與PHP的print_r等價的東西?
- 17. 在nodejs中是否有與Python的virtualenv等價的東西?
- 18. .NET BCL中是否有與java的File.deleteOnExit()等價的東西?
- 19. 在C++和C#中,私有是否意味着不同的東西?
- 20. 是否有替代WebBrowser的Windows窗體?
- 21. C#中是否有類似於java.lang.Class的東西?
- 22. Objective-C中是否有類似Java Comparable接口的東西?
- 23. Objective C中是否有類似parse_url的東西?
- 24. 在C++中是否有類似於typeof的東西?
- 25. 在Objective-C中是否有類似於LINQ的東西?
- 26. C#中是否有類似JAX-B的東西?
- 27. 是否存在與Android的runOnUiThread等效的C#/ Windows窗體?
- 28. Linux世界中是否有與.Net FileSystemWatcher等價的東西?
- 29. 在JavaScript中是否有與Apache HTTP Client等價的東西?
- 30. 在mercurial中是否有與svn:關鍵字等價的東西?
爲什麼你需要'EndInvoke'?你是否期待回報價值? – climbage
只是一個側面說明......您的工作線程是否支持取消或者他們的工作是否必須始終運行完成?我很好奇,因爲據我所知,爲了支持取消,工作線程必須定期阻止檢查'取消'標誌。也就是說,除非檢查允許競爭條件,在這種情況下這可能是可以接受的。 – groverboy