1つ目はデリゲートを定義し、2つ目はイベントを定義します。この2つは関連していますが、通常は非常に異なる方法で使用されます。
一般に、EventHandler
またはを使用している場合EventHandler<T>
、これはイベントを使用していることを示します。発信者(進行状況を処理するため)は通常、イベントをサブスクライブし(デリゲートを渡さない)、サブスクライバーがいる場合はイベントを発生させます。
より機能的なアプローチを使用し、デリゲートを渡す場合は、使用するより適切なデリゲートを選択します。この場合、実際にはで情報を提供していないEventArgs
ので、おそらく単に使用System.Action
する方が適切でしょう。
そうは言っても、ここに示されている小さなコードから、イベントアプローチがより適切であるように見えます。イベントの使用の詳細については、 『C#プログラミングガイド』の「イベント」を参照してください。
イベントを使用したコードは、次のようになります。
// This might make more sense as a delegate with progress information - ie: percent done?
public event EventHandler ProgressChanged;
public void Download(string url)
{
// ... No delegate here...
あなたがあなたの進歩を呼ぶとき、あなたは書くでしょう:
var handler = this.ProgressChanged;
if (handler != null)
handler(this, EventArgs.Empty);
これのユーザーはこれを次のように書きます:
yourClass.ProgressChanged += myHandler;
yourClass.Download(url);