2011-08-04 11 views
3

私はBackgroundWorkerと一緒に作業していますが、私はBackgroundWorkerは、ユーザーがフォーム上で別のタスクを実行できる間にデータベースからデータの取得プロセスを実行します。問題は、データを取得した後、FormDoWorkイベントのリストビューにアクセスすることができないということです。これは、取得したデータを使用してListViewにデータを入力します。BackgroundWorker私は何をすべきか?何か不足していますか?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

@ビニール質問はクリアだと思います。これを知っていれば、ソースコードは必要ありません。 – dpp

+0

@Binil私は簡単な質問を編集しました。とにかく応答に感謝します。 – dpp

答えて

2

BackgroundWorkerのドキュメントは非常に明確である:

あなたは任意のユーザインタフェースオブジェクトを操作しないように注意する必要がありますDoWorkイベントハンドラで代わりに、ProgressChangedイベントとイベントを介してユーザーインターフェイスに通信します。クラスレベルの変数に格納するようなオブジェクトに対して配置することによって -


サンプル"How to: Download a File in the Background"は、オブジェクトがメインスレッドとバックグラウンドワーカー間で共有することができる一例の方法を示します。

+0

それでは、 'DoWork'から行ったオブジェクトを関数、オブジェクト、あるいは' ProgressChanged'に渡すにはどうしたらいいですか? – dpp

+0

@domanokz - 私は、ワーカーとUIスレッドの間でオブジェクトを共有する方法の1つを示す別のサンプルへのリンクを追加しました。 –

+0

ありがとう!それが私の最初の問題を解決しました。私の問題は、他のコントロールにアクセスすることができないので、DoWorkにパラメータを渡す方法です。うーん、私はそれを見つけるでしょう。再度、感謝します! – dpp

0

DoWorkEventArgsには、UIを操作するための指示を含むユーザー定義のクラスなど、任意のオブジェクトを格納できるプロパティが含まれます()。

関連する問題