読者です 読者をやめる 読者になる 読者になる

森理 麟(moririring)のプログラマブログ

ゲームプログラマ森理 麟がのプログラムの話題を中心に書くブログです。

クッキーツイートの高速化 その10 BackgroundWorkerの具体的な使い方 with ソース #CookieToEat

C# クッキーツイート 高速化

←ご一緒にソースを添えてお召し上がり下さい。


それでは具体的な使い方をソースを書きながら説明します。

先ずBackgroundWorkerコンポーネントを追加します。

ツールボックスの一番上にあるので、探しやすいと思います。

追加したら、開始処理としてRunWorkerAsyncを呼びます。

private void button1_Click(object sender, EventArgs e)
{
    //開始処理
    button1.Enabled = false;
    backgroundWorker1.RunWorkerAsync();
}


因みにこのコンポーネントは描画は何もしません。

メソッドだけで構成され、イベントもたった3つしかありません。

しかし、山椒は小粒でピリッと辛いです。

次にDoWorkイベントを呼び、ここで処理を書きます。

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    //重い処理
    for(int i = 0; i < 10000000; i++);
}


注意点としては、このメソッドでは全てのコンポーネントへの書き込みが出来ません。

ここでやってしまうとストップします。

対象方法は今回は飛ばします。ここではやらないようにしましょう。

最後にRunWorkerCompletedイベントを呼び、ここに終了処理を書きます。

private void backgroundWorker1_RunWorkerCompleted(object sender, DoWorkEventArgs e)
{
    //終了処理
    button1.Enabled = true;
}


これで、非常にシンプルにマルチスレッド化が実装出来ました。

実際に動かしてみると分かりますが、今まで止まっていた処理が動くようになります。

しかし、逆に言うと動くがために操作ができてしまって困ることもあります。

それを防ぐためにもボタンを操作できなくしている訳です。