welcome to tetsuyanbo web site!!

tetsuyanbo

C#

C#メモ 並列処理ができるBackgroundWorkerクラスを使ってみる

投稿日:2017/05/25

やっぱりWindowsのアプリを作るからにはUIは操作できるようにたくなったので。
ポイントとしてはこんなとこっぽい。

  • BackgoundWorkerをフォームへ追加
  • BackgroundWorkerへ処理を追加する
  • BackgroundWorkerの動作イベントを呼び出す(今回はフォームをロードしたら動作するようにする)

まずは、メインにするフォームをこんな感じで作っとく。

  1. フォームのクラス名はMainForm、タイトルバーの表示はProtoってした。
  2. ツールボックスのBackgroundWorkerをフォームに追加する。
  3. 今回はフォームが表示されたときに並列処理を開始したいので、フォームのイベントでLoadの項目にメソッドを追加する。
    メソッド名はOnLoadって名前にした。
  4. BackgroundWorkerのイベントでDoWorkっていう実際に並列処理をするイベントと、RunWorkerCompletedっていう処理が終了したときのイベントを追加しとく。
    メソッド名はDoWorkがOnDoWorkって名前、RunWorkerCompletedがOnRunWorkerComletedって名前にした。

んで、コード。
まずはフォームをロードしたときのイベントで、OnLoadメソッドのコードはこんな感じ。
BackgroundWorkerクラスのインスタンスのRunWorkerAsync()ってメソッドを呼び出すようにコードを書いとく。

次はBackgroundWorkerクラスのインスタンスで並列処理をするときのイベントで、OnDoWorkerメソッドのコードはこんな感じ。
とりあえずメッセージボックスで処理が始まったよ?って事を表示したあとで何もせずに10秒待つって内容にした。

んで、並列処理が終わったときのイベントで、OnRunCompletedメソッドのコードはこんな感じ。
なんもなしでシレッと終わったらわからないので、これまたメッセージボックスを表示するようにした。

んで、実行したらこんな感じ。

  1. 実行するとすぐにこんなメッセージボックスが表示される。
  2. んで、メイン画面が表示される。
    このとき既に並列処理が始まってるんだけど、ちゃんとマウス操作もできる。
  3. 10秒すると何もしていないのにこんなメッセージボックスが表示される。

ちなみに、進捗を検知するイベントは次回...。

そんなこんなで、明日への自分へのメモってことで。

-C#
-, , , , , , , , , , , , , , , , ,

Copyright© tetsuyanbo , 2018 All Rights Reserved Powered by STINGER.