2013-07-30 80 views
2

如何將BackgroundWorkerDoWork的值傳遞給BackgroundWorkerCompleted?由於BackgroundWorkerCompleted不叫BackgroundWorkerDoWork我不知道如何做到這一點,除了宣佈public variable。本質上,我希望BackgroundWorkerCompleted通過ByVal接受來自BackgroundWorkerDoWork的變量。從BackgroundWorker DoWork傳遞值到BackgroundWorker完成

+0

我同意你的看法,既然你不能保證在同一個線程上執行,那麼「共享」數據最安全的方法就是將其放入一個公共變量中,然後使用一些線程安全的訪問機制來確保沒有死鎖。 –

回答

2

當你宣佈你DoWork功能,請注意,它內置了一些有用的參數:

​​

,並記下RunWorkerCompleted處理類似的論點:

Private Sub backgroundWorker1_RunWorkerCompleted(ByVal sender As Object, _ 
              ByVal e As RunWorkerCompletedEventArgs) _ 
             Handles backgroundWorker1.RunWorkerCompleted 

重要的是,你有機會到e.Result,它可以是RunWorkerCompletedEventArgs中的任何對象,也可以是DoWorkEventArgs中的e.Result--後者在傳入方法com時傳遞給前者pletes所以在您的輔助方法結束剛剛設置:

e.Result = myResult 

,然後在RunWorkerCompleted處理程序也可以訪問它通過:

if e.Result = (whatever) then 
    .... etc 

參考:

RunWorkerCompletedEventArgs.Result Property : MSDN

DoWorkEventArgs.Result Property : MSDN

相關問題