この質問が多く寄せられていることは知っていますが、非常に実用的な方法で、できればコード例を使用して尋ねたすべてのことに対して、1 つの答えが必要です。C# でデリゲート メソッドを使用する必要があるのはいつですか? それの使い方?なぜ使用する必要があるのですか?マルチスレッドとは何の関係がありますか?
どんな答えでも大歓迎です。
デリゲートは基本的にメソッド ポインターです。メソッドとそのオブジェクトへの参照があります (もちろん、静的メソッドでない限り)。
メソッドを呼び出す必要があるときはいつでもデリゲートを使用しますが、それを呼び出すコードはそれがどのメソッドであるかを知りません。最も一般的な理由は、メソッドを呼び出すコードがメソッドの前に作成されたことです (例: のようなライブラリ メソッド) List<T>.Sort(comparison)
。
デリゲートは別のスレッドでメソッドを呼び出すのではなく、デリゲートを使用するコードと同じスレッドで呼び出されます。メソッドが別のスレッドで呼び出されるのは、デリゲートを使用するコードが別のスレッドで既に実行されているか、具体的にはメソッドの新しいスレッドを開始するためです。
マルチスレッドに関して Delegate.BeginInvoke は、バックグラウンド スレッドでメソッドを呼び出すために使用されます。デリゲートは、関数参照を ThreadPool backgroundworker などの他のマルチスレッド コンストラクトに渡すためにも使用されます。
デリゲートは、C のような任意の関数を指す関数ポインターです。デリゲートをパラメーターとして他の関数に渡すことができます。
これをコールバック関数、スレッドなどに使用できます。
詳細については、このMSDNリンクを参照してください