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);
}
}
}
まとめ
本記事では、C#でスレッドを使う際、スレッドのメソッドに引数を渡す方法を2つ紹介しました。