第23講 BackgroundWorkerによるマルチスレッド
第1話 BackgroundWorkerとは?
マルチスレッド対応プログラムの2番目の方法を紹介しましょう。
ここで紹介するものは、BackgroundWorkerを使う方法です。
まず、BackgroundWorkerとは何かを説明しましょう。
最初に、ヘルプで出てくるマイクロソフトの説明をそのまま引用しましょう。
引用−−−
BackgroundWorker クラスを使用すると、個別の専用スレッドで操作を実行できます。ダウンロードやデータベース トランザクションのように時間を要する操作によって、操作の実行中にユーザー インターフェイス (UI: User Interface) が応答しなくなったように思われる場合があります。UI にすぐに応答させたいときに、このような操作に関連する長時間の遅延が発生している場合は、BackgroundWorker クラスに便利な解決方法が用意されています。
時間を要する操作をバックグラウンドで実行するには、BackgroundWorker を作成し、操作の進行状況を報告したり、操作の終了時に通知したりするイベントを待機します。BackgroundWorker は、プログラムによって作成することも、ツールボックスの [コンポーネント] タブからオブジェクトをフォームにドラッグすることもできます。Windows フォーム デザイナで BackgroundWorker を作成すると、オブジェクトは [コンポーネント トレイ] に表示され、そのプロパティは [プロパティ] ウィンドウに表示されます。
バックグラウンド操作を設定するには、DoWork イベントのイベント ハンドラを追加します。このイベント ハンドラで、時間を要する操作を呼び出します。操作を開始するには、RunWorkerAsync を呼び出します。進行状況の更新の通知を受け取るには、ProgressChanged イベントを処理します。操作の完了時に通知を受け取るには、RunWorkerCompleted イベントを処理します。
−−−以上引用
どうです。見事にチンプンカンプンですよね。
呪文としか言いようがありません。
仕方ありません。
初心者の気持ちの1%も理解できない人たちが、説明を書いているのですから。
もっとも、入門書を書いている人たちも50歩100歩ですが。
基本的にエンジニアの方は、説明が下手なのです。
これを簡単に説明すると、次のようになります。
現在Windows上で動かしているメインのソフトとは、別に海面下で別のソフトを動かしたいときはBackgroundWorkerを使えばよい、
ということなのです。
アヒルは、優雅に水に浮いているように見えても、水面下では激しく足を動かしているそうです。
Windowsのソフトもこれに似ています。
例えば、ワードを動かしているとき、実はバックグランドではいろいろなソフトが動いています。
水の上でワードが動いているとき、水面下では実はいろいろなソフトが動いています。
ウィスル監視ソフト、OSを動かすために必要な様々なプログラムなどが背景=バックグランドでは動いているのです。
さらに、インターネットから大きなソフトをダウンロードしながら、ワードを操作しているときには、
ブラウザも水面下で動いていることになります。
現在処理している直線的な流れから
分岐させて、背景上(水面下)で物事を処理させたいとき、BackgroundWorkerを使えばよいということなのです。
しかも、BackgroundWorkerの場合『操作の進行状況を報告したり、操作の終了時に通知したりする』ことができるということなのです。
これが、先の呪文に書いてあった内容です。
どうです。簡単な内容を、訳の分からない書き方で書いてありますよね。
はじめて読んだ人は、マイクロソフトの説明を理解できる人は、
大変高級な頭脳をもっている人で、自分とは違う人種なのではと思ってしまうでしょうね。
自分には理解できない、大変高尚なことが書いてある・・・
でも実際には、とっても簡単な内容を理解困難な言い回しで言っているに過ぎません。
処理を分岐させる、すなわち、1本の直列処理から、数本の並列処理へ移行させるので、これも結局マルチスレッド処理です。
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual
Basic入門基礎講座