VB2005のBackgroundWorkerの使用方法とは?

このQ&Aのポイント
  • VB2005のBackgroundWorkerを指定した数だけ使用する方法をご教示ください。
  • 複数のBackgroundWorkerを同時に実行する方法はありますか?
  • VB2005のBackgroundWorkerを使って複数のタスクを同時に実行する方法を教えてください。
回答を見る
  • ベストアンサー

VB2005 BackgroundWorkerの使用

お世話になります。 VB2005のBackgroundWorkerを指定した数だけ使用したいのですが エラーメッセージが以下のように表示されます。 ---------------------------------------------- BackgroundWorker は現在ビジー状態であるため、 複数のタスクを同時に実行できません。 ---------------------------------------------- コーディングは ~FormLoad~ BackgroundWorker1.RunWorkerAsync() BackgroundWorker1.RunWorkerAsync() この部分はFor文で指定しただけ実行したいと考えてます ~DoWork~ Console.Write("DoWork" & vbCrLf) ~RunWorkerCompleted~ Console.Write("RunWorkerCompleted" & vbCrLf) と、しております。 どのようなコーディングを行えば複数実行することが 可能なのでしょうか? よろしくお願いします。

noname#50030
noname#50030

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

お世話になります。 > どのようなコーディングを行えば複数実行することが可能なのでしょうか? BackGroundWorker を 複数使いましょう。

noname#50030
質問者

補足

回答ありがとうございます。 デザイナからBackGroundWorkerを貼り付けているのですが これを動的に貼り付けることが可能ということこでしょうか?

その他の回答 (1)

回答No.2

お世話になります。 BackGroundWorker に限らず、 .NET Component はコード内で生成することは可能ですよ。 Dim bw As BackGroundWorker = New BackGroundWorker() みたいに。 必要な数が決まっているならデザイナで、 実行時に必要な数が決定するなら、コード内で動的に生成すればいいのでは。

関連するQ&A

  • BackgroundWorkerと同期 VB2008 VB2005

    VB2008で、BackgroundWorkerを使って重たい処理をさせています。 DoWork内で、ReportProgress(パーセント値)を呼び出して ProgressChangedメソッドで、そのときの状態を表示させています。ぷプログレスバーだけでなく、あらかじめ作成したデータをTextBoxに情報を表示させています。 しかし、ReportProgress(パーセント値)の後にSystem.Threading.Thread.Sleep(200)を入れないと、たまに ProgressChangedの中のTextBoxを表示させる処理が実行されなくなります。 ReportProgress(パーセント値)の後に同期をとる処理はSleep以外に何かあるのでしょうか? BackgroundWorkerの同期について詳しく書かれている本も探しています。

  • .NetのBackgroundWorkerクラスについての質問です。

    .NetのBackgroundWorkerクラスについての質問です。 BackgroundWorkerクラスなるものを知るまでは、Threadクラス等でマルチスレッドを実装していました。 MSDNを読みながら、実装自体は非常に簡単に出来ましたが、このバックグラウンドスレッドとは如何なるものなのでしょうか。 フォアグラウンド/バックグラウンドタスクであるならば、CPU優先度(占有度)により、その実行タイミングが左右されるのは容易に想像できるのですが、バックグラウンドスレッドは、どのようにCPU優先度が決まるのでしょうか。(デスクトップWindowsでは、あまり機会がないかとは思いますが、リアルタイムな処理,クリティカルな処理を同クラスによって実装していいのか判断できませんでした。) Formクラスから生成されるということは、Formウィンドウのメッセージスレッドをフォアグラウンドスレッドとし、そのバックグラウンドスレッドといった関係になるのでしょうか。(Formウィンドウのアイドル時間にバックグラウンドスレッドが実行されるという理解であっていますでしょうか。) また、スレッド内でのsleep()呼出しで、スレッドは別スレッドに制御が切り替わるハズだったと思いますが、バックグラウンドスレッド内でThread::Sleep()呼出しをした場合、必ず、フォアグラウンドスレッドに制御が移り、フォアグラウンドスレッドのアイドル時間が発生するまで、バックグラウンドスレッドへ制御が戻ることがないということでしょか。(各スレッドへいつ制御が移るのか分かりませんでした。) ご回答、または、参考サイト,参考文献等、教えてくださると非常に助かります。

  • VBの実行時の処理の流れ(仕組み)について教えて下さい

    WindowsXp-Pro上でVB.NET2003を使用しています。VB.NET初心者です。 VB.NETはコーディング後デバッグを行いエラーがなければ実行される訳ですが、実行時の処理の流れと言うか、仕組みについてご伝授頂きたいと思います。 VB.NETにおいてはオブジェクト指向が進んでおりコーディング作業時は全体の流れを考えなくても、クラス内でのインスタンスやサブルーチン・関数ルーチン、フォームロード時の処理、モジュール内での処理等のコーディングのみを考えていれば実行できるようになっています(少なくとも今まで私が作成したプログラムはそうでした)。しかし、色々なサンプルプログラムを作っているとこれはクラスで指定した方が良い処理とかモジュールで指定した方が良いのではと思うことが多々あります。 プロジェクトやフォーム、クラス、モジュール、コンポーネントクラス、ユーザーコントロール、データフォームウィザード、継承コントロール (これらはVisualStudioの「プロジェクト」メニューをクリックした時の項目です) 等の処理の順序が判っていればもっと効率的な処理を適材適所に配置できるのではないかと思います。 これらをコーディングレベルで結構ですので機械内での処理の順序をご説明頂ければ幸いに思います。現在のところコンピュータは並列処理はできないので必ず優先順位がつくと思うのですが、未熟な為VBの全体像がつかめず処理の流れも判らずにいます。 よろしくお願い致します。

  • 複数の処理を同時に行うには?

    一定の処理を行うクラスAを クラスBから同時に複数(100程度)同時に実行するには どのような記述方法があるのでしょうか? For文でクラスBからクラスAを呼ぶ処理を記述しても ひとつずつしか動作しませんでした… 何かアドバイスお願いします。 環境はVB2005を使用しております。

  • VB6と2008、SQL使用方法の違いについて

    最近VB2008を始めた初心者です。データベースはアクセスです。 これまでは、VB6.0にてデータベースへの書き込みを行う際は、VB6のSQLを使用していました。1つのレコードに複数のフィールドがある場合も、以下のようなプロシージャを作成し処理の共有を行っておりました。 UserMaster!Name=Textbox1.Text UserMaster!ID=Textbox2.Text UserMaster!Collection1=Textbox3.Text UserMaster!Collection2=Textbox4.Text UserMaster!Collection3=Textbox5.Text ・・・ そして、VB2008に移行後はSQLステートメントを以下のようにそのまま使用しております。 cmnd.CommandText = "INSERT INTO Work (Id,Collection1,Collection2・・・) " & _ " VALUES ('" & Textbox1.Text & "','" & Textbox2.Text & "'," & Textbox3.Text & ・・・)" cmnd.ExecuteNonQuery() しかし、このようにコマンドテキストにて保存を行う場合、同一レコードに多数のフィールドがある場合、ステートメントが長文になってしまいます。 VB6のように保存処理を別にプロシージャにて実行させる方法は何かないでしょうか? .NETでは根気よくコーディングしていくしかないのでしょうか? アドバイス願います。m(_ _ )m

  • VBかエクセルでの指数近似のやり方について教えてください.

    VBかエクセルでの指数近似のやり方について教えてください. あるサンプルデータの指数近似をやろうと思っています.指数近似曲線y=a*exp(bx)の定数aとbを求めようと思っておりますが,同時にサンプルデータの点数も変更しながら計算しようと思っております.指数近似の場合,例えば定数bを算出するときエクセルでは =INDEX(LINEST(LN(H2:H23),G2:G23),1) と書いています.つまり近似する対象となるサンプルデータの点数が変わると指定範囲(H2:H23)に空白セルや0の部分が出来てしまいます.VBだとfor文でそれらを回避することが出来るのですが,今度はVBでの指数近似のやり方(プログラム)がわかりません. どなたか教えていただけないでしょうか?

  • VB初心者です。

    二つのブックを開いているときに。 1のブックの指定の文字を含む行のみを2のブックに参照していく作業をしたいのですが、色々webで探していたのですが、いまいちよくわからなかったので質問させていただきました。 やりたい内容 (1) ブック1とブック2を同時に開いている (2) ブック2でVBを実行する (3) ブック1の1列目を参照して任意の文字ががある場合にブック2の1行目からどんどんコピペしていく ブック1 1列目  2列目  3列目  4列目  5列目 指定   あ     い     う     え 不一致  か     き     く     け 不一致  さ     し     す     せ 指定   た     ち     つ     て ブック2 1列目  2列目  3列目  4列目  5列目 指定   あ     い     う     え 指定   た     ち     つ     て このような状態にしていきたいのですが、お分かりになる方いらっしゃいましたら、お力添え頂ければ幸いです。 よろしくお願い致します。

  • vbスクリプトからexcelのVBAを起動したい。

    vbスクリプトからexcelのVBAを起動したいので、初心者ながら下記のようにコーディングしましたが、excelのVBA;main()が実行できません。  <excelのVBA;main()は単独では正常に起動します。> vbスクリプトからexcelのVBAの起動の方法を教えて下さい。 そのスクリプトをタスク(元旦)に起動したいです。 <vbスクリプト コーディング> dim exlApp On Error Resume Next set exlApp = createobject("Excel.Application") exlApp.visible = true exlApp.Workbooks.Open "C:\年賀状.xls" exlApp.run "Main" If Err Then WScript.Quit End IF If Not(exlApp Is Nothing) Then exlApp.Quit set exlApp = nothing End If

  • VB2008で指定したURL先のテキストデータを取込

    Visual Basic2008にて、とあるコマンド処理を実行した際、別テキストボックスに表示されている指定したURL先のHTMLのテキストデータを取り込み、別テキストボックスに表示をさせたいのですが、VB2008の参考書等が見当たらない為、自力で調査ができません。 指定したURLからテキストファイルの取り込み処理をする関数、またはコーディングサンプル等をご教授いただけますでしょうか。 よろしくお願いいたします。

  • Sub-EndでConsole.Writeでコマンドプロンプト出力したい

    VB.NET2003:WindowApplication の Sub~End で 出力Console.Write("***") としてもコマンドプロンプトウィンドウにでないで、.NETウィンドウのデバッグ欄にしか出ない。前もって何かを指定しなければならないのでしょうが全くわかりません。ConsoleApplication ではうまくいっていますが。初心者なのでよろしくお願いします。