グローバル変数をパラメーターとして使用する唯一の方法ですか、それとももっとファッショナブルな方法がありますか?
4 に答える
ParameterizedThreadStartを使用して、パラメーターを使用してスレッドを開始できます。
例:
Thread newThread = new Thread(myObj.DoMethod);
newThread.Start(parameter);
ただし、私は通常ラムダを使用することになります
Thread newThread = new Thread(() => myObj.DoMethod(param1, param2, param3));
newThread.Start();
ParameterizedThreadStartは単一object
をパラメーターとして受け取るため、これはより便利な場合があります。これはめったに私が望むものではありません。
単純なものを使用してクロージャを使用し、Action<T>
パラメータを使用してメソッドを呼び出すことができます。
var thread = new Thread(() =>
{
CallSomeMethod(someParam);
});
root46 が既に回答したように、スレッドを直接操作する場合はParameterizedThreadStartを使用します。ただし、.NET 4 以降を使用している場合は、 Task and Task Parallel Libraryもご覧ください。
これを行うより言語に依存しない方法は、メソッドが単一の引数しかとることができず、複数のデータがある場合、必要な各引数のプロパティを持つ新しいクラスを作成し、インスタンスを渡すだけです。そのクラス。(これは、EventArgs
イベント処理に関連するオブジェクトで実行されたものです。)
そうは言っても、他の人が言ったように、ラムダのクロージャーを使用することは、実際にはより便利になる傾向がある、かなり滑らかで簡単な方法です。