【C#】スレッドに引数を渡す2つの方法

C#

C#でスレッドを使う際、スレッドのメソッドに引数を渡す方法を2つ紹介します。

ParameterizedThreadStart を使用するサンプルコード

ParameterizedThreadStartを使用することで、スレッドメソッドに object 型の引数を渡せます。Thread.Start メソッド側では、object型の引数を適切な型にキャストする必要があります。

using System;
using System.Threading;

class Program
{
    static void Main(string[] args)
    {
        // ParameterizedThreadStartを使用してスレッドに引数を渡す
        Thread thread = new Thread(new ParameterizedThreadStart(ThreadMethod));
        thread.Start(5); // スレッドメソッドに引数(5)を渡す

        thread.Join();
        Console.WriteLine("Main thread finished.");
    }

    // スレッドで実行されるメソッド
    // object型のパラメータを受け取る
    static void ThreadMethod(object obj)
    {
        int number = (int)obj; // object型からint型にキャスト

        for (int i = 0; i < number; i++)
        {
            Console.WriteLine($"ThreadMethod: {i}");
            Thread.Sleep(500);
        }
    }
}

ラムダ式を使用するサンプルコード

ラムダ式を使用すると、複数の引数を持つメソッドや、引数の型が object 以外のメソッドに引数を渡すことができます。ラムダ式を利用することで、より柔軟にスレッドを操作できるようになり、コードの可読性も向上します。

using System;
using System.Threading;

class Program
{
    static void Main(string[] args)
    {
        int number = 5; // スレッドメソッドに渡す引数
        Thread thread = new Thread(() => ThreadMethod(number)); // ラムダ式を使用して引数を渡す
        thread.Start();

        thread.Join();
        Console.WriteLine("Main thread finished.");
    }

    // 引数を直接受け取るスレッドメソッド
    static void ThreadMethod(int number)
    {
        for (int i = 0; i < number; i++)
        {
            Console.WriteLine($"ThreadMethod: {i}");
            Thread.Sleep(500);
        }
    }
}
タイトルとURLをコピーしました