2012-01-02 8 views
2

BackgroundWorkerを使用して重いタスクを実行しているため、UIスレッドはブロックされません。 BackgroundWorkerはprogress-schemeを使用してUIスレッドに値を送信できますが、BackgroundWorkerはUIスレッドからいくつかの値を取得できますか?BackgroundWorkerは実行中にUIスレッドからどのように値を取得できますか?

質問するか、単にUIスレッドがBackgroundWorkerに値を送信するかのどちらかです。

BackgroundWorker内のUIForm.xのようなUIスレッドの変数にアクセスするだけで、UI変数にアクセスできないようですね???

多くのありがとう

+0

RunWorkerAsync()は、Objectを引数として取ります。これは、作業者が必要とするUI値を格納するために作成するクラスのオブジェクトです。 –

+0

ありがとう、私はワーカーを開始するだけの値を必要としません - ワーカーは既に実行中にUIスレッドから値を数回取得する必要があります。私は私の質問でこれをより明確にすべきだった... – user387184

+0

それは間違っているよ。値が変わるときは全く予測できません。ワーカーを実行しておき、ユーザーが再び起きるのを待つことはありません。そのような値が変更されたときに作業員を再開するだけです。 –

答えて

4

UIスレッド以外のスレッドはUIにアクセスできません。あなたはおそらくworker.RunWorkerAsync()でBackgroundWorkerを開始しました。 worker.RunWorkerAsync(someObject)で開始することもできます。作業者が実行中は、新しいオブジェクトを渡すことはできませんが、オブジェクト自体の内容を変更することはできます。オブジェクト型は参照型なので、UIスレッドとワーカースレッドは同じオブジェクトコンテンツを参照します。

Imports System.ComponentModel 
Imports System.Threading 

Class BgWorkerCommunication 
    Private _worker As BackgroundWorker 

    Private Class WorkParameters 
     Public text As String 
    End Class 

    Public Sub DoRun() 
     Dim param = New WorkParameters() 

     _worker = New BackgroundWorker() 
     AddHandler _worker.DoWork, New DoWorkEventHandler(AddressOf _worker_DoWork) 
     AddHandler _worker.RunWorkerCompleted, New RunWorkerCompletedEventHandler(AddressOf _worker_RunWorkerCompleted) 

     param.text = "running " 
     _worker.RunWorkerAsync(param) 
     While _worker.IsBusy 
      Thread.Sleep(2100) 
      param.text += "." 
     End While 
    End Sub 

    Private Sub _worker_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) 
     Console.WriteLine("Completed") 
    End Sub 

    Private Sub _worker_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) 
     Dim param = DirectCast(e.Argument, WorkParameters) 
     For i As Integer = 0 To 9 
      Console.WriteLine(param.text) 
      Thread.Sleep(1000) 
     Next 
    End Sub 
End Class 
+0

パーフェクト!これは魅力のように機能します。どうもありがとう! – user387184

関連する問題