tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルBackgroundWorkerの同時呼び出し
記事No8884
投稿日: 2009/04/27(Mon) 06:40
投稿者ヨーキー
こんにちは。BackgroundWorkerの同時呼び出しについて
質問させてください。

環境:VB2008 Express Edition, windowsXP

下記の例のような、リアルタイムに変動するデータを条件比較をして、
条件が成立したものから順にスレッド処理を実行させたいと考えているのですが、
1つのBackgroundWorkerを同時に呼び出す方法が分からなくて困っております。
ご指導頂けないでしょうか。

メインループ開始〜
条件1が成立 →BackgroundWorker1を動作(条件1の引数を渡す)
条件2が成立 →BackgroundWorker1を動作(条件2の引数を渡す)
条件3が成立 →BackgroundWorker1を動作(条件3の引数を渡す)
  ・
  ・
〜メインループ終了

スレッドの処理開始〜
BackgroundWorker_DoWork1
{
 処理1(3秒間条件が一致し続けていれば次の処理へ)
 処理2
 処理3(3秒間条件が一致し続けていれば次の処理へ)
 処理4
}
〜スレッド処理終了


試しに下記のようなコードで動作させてみたのですが、
1回しか動作していないようで、うまくいきませんでした。。。

For i = 0 To 5
   BackgroundWorker1 = New System.ComponentModel.BackgroundWorker
   BackgroundWorker1.RunWorkerAsync()
Next

[ツリー表示へ]
タイトルRe: BackgroundWorkerの同時呼び出し
記事No8885
投稿日: 2009/04/27(Mon) 11:21
投稿者ダンボ
> 1つのBackgroundWorkerを同時に呼び出す方法が分からなくて困っております。

「1つのBackgroundWorkerインスタンスを同時に呼び出す」…できない
「同じ処理メソッドを持つ複数のBackgroundWorkerインスタンスを同時に呼び出す」…できる


Dim BG(5) As System.ComponentModel.BackgroundWorker
Private Sub Test()
    For i As Integer = 0 To BG.Length - 1
        BG(i) = New System.ComponentModel.BackgroundWorker
        AddHandler BG(i).DoWork, AddressOf BG_DoWork
        AddHandler BG(i).ProgressChanged, AddressOf BG_ProgressChanged
        AddHandler BG(i).RunWorkerCompleted, AddressOf BG_RunWorkerCompleted
        BG(i).RunWorkerAsync(arg(i))
    Next
End Sub

[ツリー表示へ]
タイトルRe^2: BackgroundWorkerの同時呼び出し
記事No8886
投稿日: 2009/04/27(Mon) 12:13
投稿者ヨーキー
> 「1つのBackgroundWorkerインスタンスを同時に呼び出す」…できない
> 「同じ処理メソッドを持つBackgroundWorkerインスタンスを同時に呼び出す」…できる

お返事ありがとうございます。教えて頂いたコードで見事に問題が解決しました。

私はどうやら型の宣言のところで、WithEventsと宣言していたため、
エラーが出てしまい、BackgroundWorkerはクラスとは使い方が違うのかと
勝手に思い込んでいたようです^^;
それに、AddHandlerの使い方もようやく理解できました。
Handlesで書けばいいのに、何のためにあるんだろってずっと思ってました。。。

ダンボさん、本当にありがとうございますっ!

[ツリー表示へ]