2011-08-04 55 views
3

我正在使用BackgroundWorker,我希望BackgroundWorker做數據庫的數據檢索過程,而用戶仍然可以在窗體上執行另一個任務。問題是,在檢索數據後,我似乎無法訪問我的FormDoWork事件BackgroundWorker的ListView,我將使用我檢索的數據填充該ListView。我該怎麼辦?我錯過了什麼嗎?VB.NET WinForms - 如何從BackgroundWorker的線程訪問主線程的對象?

考慮這個例子,這就是我正在做它:

Public Class Test 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     BackgroundWorker1.RunWorkerAsync() 
    End Sub 

    Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork 
     Label1.Text = "Hello World" 
    End Sub 
End Class 
+0

張貼你已經嘗試過的東西... – Binil

+0

@Binil我認爲這個問題很清楚。如果你知道這一點,源代碼是沒有必要的。 – dpp

+0

@Binil我編輯了我的問題,一個簡單的問題。無論如何感謝您的迴應。 – dpp

回答

2

BackgroundWorker的文檔是很清楚的:

你一定要小心,不要操作任何用戶界面對象在你的DoWork事件處理程序中。而是通過ProgressChangedRunWorkerCompleted事件與用戶界面進行通信。


樣品"How to: Download a File in the Background"表明對象可以主線程和背景工人之間共享一個示例的方式 - 通過安排將被存儲在在類級變量這樣的對象。

+0

那麼我怎樣才能將我從'DoWork'完成的對象傳給任何函數,對象或'ProgressChanged'呢? – dpp

+0

@domanokz - 我添加了另一個示例的鏈接,顯示了在工作人員和UI線程之間共享對象的一種方法。 –

+0

謝謝!這解決了我的第一個問題,現在我的問題是如何將參數傳遞給'DoWork',因爲我無法訪問其他控件。嗯,我會找到它的。再次感謝! – dpp

0

DoWorkEventArgs包含在其中可以存儲任何對象,諸如包含用於操縱UI的指令的用戶定義的類的Argument屬性。

相關問題