WorkerThreadから情報を送信する

デリゲート、イベントを使用してスレッド処理中の状態の変化を送信する。

class Worker
{
  public delegate void ThreadProcessUnitCompleteEventHandler(int state);
  public event ThreadProcessUnitCompleteEventHandler eventHandler;
  private bool finished = true;
  private Thread workThread;

  //開始
  public void start()
  {
    if(workThread != null)
    {
      workThread = new Thread(new ThreadStart(workerThreadLoop));
      workThread.start();
    }
  }

  //終了
  public void stop()
  {
    finished = false;
    workThread.Join();
    workThread = null;
  }

  //スレッドループ
  private void workerThreadLoop()
  {
    int count = 0;

    while(finished)
    {
      //スレッド処理
      for(int i=0;i<1000;i++)
      {
        //**** 処理 ****
      }

      //一回分の処理が終わったのでイベントを発生させる。
      if(eventHandler != null)
        eventHandler(this, count);
    }
  }
}