我有兩個關於使用BackgroundWorker的問題:在C#中使用BackgroundWorker?
1)假設你有函數A和函數B.函數A創建一個運行函數B的BackgroundWorker。所以BackgroundWorker現在在一個單獨的線程上運行函數B.函數B是一個無限的while循環,我打算長時間運行。函數A使用BackgroundWorker後,它會返回。因此,現在已經返回了啓動BackgroundWorker(函數A)的函數,BackgroundWorker線程是否繼續在後臺運行?或者它是否停止運行函數B,因爲實例化它的函數已經返回?如果它停止,我將如何使它功能B繼續運行,即使功能A已返回?
2)我需要從BackgroundWorker創建的單獨線程訪問窗體窗體項目(即文本框)。但是,如果我嘗試從非主線程的線程訪問窗體窗體項目,則會出現交叉線程錯誤。我怎麼能從一個單獨的線程安全地訪問窗體窗體項目?我基本上需要不斷從一個單獨的線程更新文本框。我知道一個BackgroundWorker有一個名爲「RunWorkerCompleted」的成員,並在BackgroundWorker完成其工作後運行。它允許我從中訪問Window窗體項目。但是,我需要在線程期間訪問窗體表單項,而不是在完成之後。我怎麼能通過一個線程安全地訪問它們?如果這不可行,那麼對於這個問題還有其他可能的解決方案嗎?
謝謝。我使用ProgressChanged,但它仍然給我一個交叉線程錯誤。任何想法爲什麼? – fdh 2012-01-17 04:57:40
你(@Farhad)嘗試了我給出的代碼片段嗎? – 2012-01-17 04:59:16
@Amir Palsapure感謝您的幫助。你的回答對我來說有點複雜(沒有你的錯),這個看起來更容易一點,所以我決定嘗試一下。我剛剛開始C#,所以這個答案似乎更容易理解。再次感謝你的幫助。 – fdh 2012-01-17 05:02:37