【C#】スレッド・プログラム ~ 引数を渡すには... ~

■ 引数を渡すには...

 * ParameterizedThreadStartデリゲートを使う
 * 引数の型は、object型1つ。

■ サンプル

例1

private void button1_Click(object sender, EventArgs e)
{
    Thread thread = new Thread(
        new ParameterizedThreadStart(this.Proccess));
    List<string> list = new List<string>()
    {
        "Red", "Blue", "White", "Yellow",
    };

    // ★Start()の引数として渡す
    thread.Start(list);
}

// ★引数は、object型で。
private void Proccess(object arguments)
{
    // ★object型を型変換する
    List<string> list = arguments as List<string>;

    string answer;
    if (list.Contains(this.textBox1.Text))
    {
        answer = "There is your color in our list";
    }
    else
    {
        answer = "No color...";
    }

    this.Invoke(new MethodInvoker(delegate
    {
        this.label1.Text = answer;
    }));
}

例2

public class Class1
{
    public string subValue = "subValue1";
}

// 引数が1つしかないので、渡す用のClassを用意
public class DataPool
{
    public string value = "value1";
    public Class1 classValue = new Class1();
}

private void button7_Click(object sender, EventArgs e)
{
    Thread thread = new Thread(
        new ParameterizedThreadStart(this.SampleProccess));

    // Start()の引数として渡す
    thread.Start(new DataPool());
}

// 引数は、object型で。
private void SampleProccess(object arguments)
{
    // object型を型変換する
    DataPool data = arguments as DataPool;

    this.Invoke(new MethodInvoker(delegate
    {
        this.label1.Text = data.value +
            " " + data.classValue.subValue;
    }));
}