【C#】スレッドプール ~ ThreadPool ~

■ サンプル

using System;
using System.Threading;
using System.Windows.Forms;

namespace SampleForm
{
  public partial class Form1 : Form
  {
    private WaitCallback waitCallback;

    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      // ThreadMethodをスレッドプールで実行できるように WaitCallbackデリゲートを作成
      this.waitCallback = new WaitCallback(ThreadMethod);
    }

    // 別スレッドで動作させるメソッド
    private static void ThreadMethod(object state)
    {
      for (int i = 0; i < 100; i++)
      {
        Thread.Sleep(5);
        Console.WriteLine(string.Format(" {0} : {1}", state, i));
      }
    }

    private void button1_Click(object sender, EventArgs e)
    {
      // スレッドプールに登録
      ThreadPool.QueueUserWorkItem(
        // 実行するメソッド
        this.waitCallback,
        // メソッドへ渡すデータ
        string.IsNullOrEmpty(this.textBox1.Text) ? "Default" : this.textBox1.Text);
    }
  }
}

出力結果例

 Default : 0
 Default : 1
 Default : 2
 Default : 3
 ・・・略・・・
 Default : 98
 Default : 99
 D : 0
 D : 1
 D : 2
 D : 3
 ・・・略・・・
 D : 99