2011-07-26 35 views
1

我有線程更新窗體控件的場景。我跟着http://msdn.microsoft.com/en-us/library/ms171728.aspx使它工作,但我沒有成功。線程不一致從線程更新窗體控件

程序創建表單控件(列表視圖)和一個線程從互聯網(股票報價)獲取信息。每當用戶從其他表單控件中選擇一個已知的符號時,就會在listView中添加一個已知的符號,這個實習生將添加到線程以從互聯網獲取引號,並且將爲該特定符號添加一個委託,線程遍歷所有監視列表符號當價格發生變化時,從互聯網獲取報價,線程調用已註冊的委託。在那個委託中,我正在訪問listView元素,在這裏我遇到了線程不一致問題。

爲了解決這個問題,我遵循上面提到的鏈接, 方法1)在委託我開始後臺工作。同樣的問題 方法-2)主程序創建後臺工作者,這個工作人員圍繞一個列表循環在listView中更新。委託會添加新的更新價格,以列出哪些後臺工作人員正在循環。當後臺工作人員再次訪問listView時會出現線程不一致的問題。

如何解決此問題?

回答

1

當後臺工作者再次訪問listView時會出現線程不一致的問題。

是的。這是因爲它不應該完成。後臺工作者僅提供對UI的安全訪問RunWorkerCompletedProgressChanged事件。 DoWork事件仍然在非UI線程中運行。要從非UI線程訪問UI,使用Control.InvokeSynchronizationContext.Send(這些應該導致進一步的調查結果,如果用作關鍵字)回到UI線程。

快樂編碼。

+0

非常感謝。這是工作。 – Srinivas

+0

@Srinivas不客氣:) – 2011-07-26 17:22:15