2013-01-22 36 views
1

我有一個窗口顯示多個工作線程的結果,但我的工作線程應該沒有中斷(幾乎),所以我想發佈我的通知數據到主窗口,我目前使用BeginInvoke,但它有一個問題!我應該撥打EndInvoke但是在哪裏?我應該創建另一個線程來處理這個問題?另一種選擇是直接使用PostMessage,但由於我正在學習使用.NET,我更喜歡.NET解決方案,而不是平臺調用(如果可用)。那麼我應該怎麼做,以便將某些內容發佈到主線程而不會阻塞我的工作線程?C#和Windows窗體中是否有與PostMessage對應的東西?

+0

爲什麼你需要'EndInvoke'?你是否期待回報價值? – climbage

+0

只是一個側面說明......您的工作線程是否支持取消或者他們的工作是否必須始終運行完成?我很好奇,因爲據我所知,爲了支持取消,工作線程必須定期阻止檢查'取消'標誌。也就是說,除非檢查允許競爭條件,在這種情況下這可能是可以接受的。 – groverboy

回答

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的回調來執行此操作。「* –

相關問題