このプログラムをC#で作成しましたが、「メソッド名が必要です」というエラーが発生します。私は何が間違っているのですか?
for (int i = 0; i < numberofThreads2; i++)
{
Thread thread1 = new Thread(new ThreadStart (Start(1, 2, 3, 4, 5)));
thread1.Start();
}
このプログラムをC#で作成しましたが、「メソッド名が必要です」というエラーが発生します。私は何が間違っているのですか?
for (int i = 0; i < numberofThreads2; i++)
{
Thread thread1 = new Thread(new ThreadStart (Start(1, 2, 3, 4, 5)));
thread1.Start();
}
スレッドデリゲートを間違って作成しています。試す:
Thread thread1 = new Thread(() => Start(1, 2, 3, 4, 5));
ThreadStart
署名付きのデリゲートvoid ThreadStart()
です。これは、新しいスレッドで委任を渡すのではなく、Start(...)
実際にすぐに実行されるを呼び出すことと同じではありません。Start
あなたはおそらくThread thread1 = new Thread(() => Start(1, 2, 3, 4, 5));
、次のメソッドと同等のラムダを作成するを探しています。これは、ThreadStart
:に変換できます。
void myLambda()
{
Start(1, 2, 3, 4, 5);
}
ThreadStart
ThreadStart はデリゲートであり、その目的はメソッドをカプセル化することであるため、メソッドの名前が必要です。
ここみたいに
public void foo () { }
ThreadStart ts = new ThreadStart(foo);
new Thread(()=> Start(1,2,3,4,5)).Start();