【C#】スレッド・プログラム ~基礎編~

■ スレッド・プログラムのポイント

以下のクラスで実装していく

 * Thread(Start()メソッド)
 * ManualResetEvent(WaitOne()メソッド、Reset()メソッド、Set()メソッド)

■ サンプル

// 非シグナル状態
ManualResetEvent manualResetEvent = new ManualResetEvent(false);

private void button1_Click(object sender, EventArgs e)
{
    Thread thread = new Thread(this.ThreadProcess);
    thread.Start();
}

private void ThreadProcess()
{
    for (int i = 0; i < 10; i++)
    {
        // Set(シグナル状態になるまで)待つ
        this.manualResetEvent.WaitOne();
        // 非シグナル状態になる
        this.manualResetEvent.Reset();
        // Invokeで、listBox1に数字を表示させる
        this.Invoke(new MethodInvoker(delegate
            {
                this.listBox1.Items.Add(i.ToString());
            }));
    }
}

private void button2_Click(object sender, EventArgs e)
{
    // シグナル状態にする
    this.manualResetEvent.Set();
}