第一个定义一个委托,第二个定义一个事件。这两者是相关的,但它们的用法通常非常不同。
通常,如果您使用EventHandleror 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);