2009-06-25 28 views
0

我有一個數據流從外部來源進入,我目前收集在BackgroundWorker。每次獲得另一塊數據時,都會使用ReportProgress()調用將該數據呈現給GUI。如何從.net BackgroundWorker緩衝輸出?

我覺得ProgressChanged函數只是一個同步機制,儘管當我的工作線程調用它時,兩個線程都在GUI線程處理更改時被鎖定。所以我認爲問題是當後臺線程更新GUI時,它不能接收任何數據,這意味着我們會丟失幾個數據包。這是對的還是我的數據包更容易在其他地方出現?

如果原因,然後將添加第二個線程做GUI更新是一個合理的解決方案,還是有解決,我應該深入探討這些問題的更好/更徹底的辦法?

任何想法和建議將非常受歡迎。

回答

0

工作線程只是發送一個異步消息到GUI線程,這將導致在GUI中觸發事件。它不應該停止你的後臺線程(不管怎麼說,如果用戶決定啓動另一個程序等等,你的GUI程序可能會暫停)

你不談論什麼你正在使用的流。所以,除非你接收到UDP數據報,而這些數據報不可靠,否則這裏不應該丟失數據。流是連續的。

+0

這些事件是以任何方式緩衝的嗎?這可能是因爲在添加另一個事件之前,GUI沒有處理第一個事件,取而代之的是?或者是標準windows消息泵的這部分? – 2009-06-25 11:05:21

0

您可能需要在GUI線程中創建SynchronizationContext對象,以便能夠使用Post方法從BackgroundWorker異步發送消息。