基本上标题是什么.
这两者之间有什么区别(我目前正在使用第一个)
这两者之间有什么区别(我目前正在使用第一个)
private EventHandler _progressEvent;
和
private event EventHandler _progressEvent;
我有一个方法
void Download(string url,EventHandler progressEvent) { doDownload(url) this._progressEvent = progressEvent; }
_progressEvent(this,new EventArgs());
到目前为止,它工作正常.但我觉得我做的事情非常糟糕.
解决方法
第一个定义委托,第二个定义事件.这两者是相关的,但它们通常使用方式非常不同.
通常,如果您使用的是EventHandler或EventHandler< T>,则表示您正在使用某个事件.调用者(用于处理进度)通常会订阅事件(不传递代理),如果您有订阅者,则会引发事件.
如果你想使用更实用的方法,并传入一个委托,我会选择一个更合适的委托来使用.在这种情况下,您实际上并未在EventArgs中提供任何信息,因此使用System.Action可能更合适.
话虽如此,从显示的小代码中看,事件方法似乎更合适.有关使用事件的详细信息,请参阅C#编程指南中的Events.
使用事件的代码可能类似于:
// 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);