如果我的问题措辞不当,我会事先道歉。
我正在利用WebClient
从互联网上下载文件。要将DownloadProgressChangedEventHandler
设置为同一类中的方法,我只需使用方法名称,例如
webClient.DownloadProgressChanged +=
new DownloadProgressChangedEventHandler(ProgressReporter);
如何将DownloadProgressChangedEventHandler
设置为课堂外的方法?
感谢。
答案 0 :(得分:2)
如果该方法是静态的,则在其前面加上它所定义的类的名称:
class ClassWithStaticMethod
{
public static void ProgressReporter(object s,
DownloadProgressChangedEventArgs e)
{
}
}
用过:
webClient.DownloadProgressChanged += ClassWithStaticMethod.ProgressReporter;
如果是实例方法,则需要掌握该类的实例:
class ClassWithInstanceMethod
{
public void ProgressReporter(object s, DownloadProgressChangedEventArgs e)
{
}
}
用过:
var myObject = new ClassWithInstanceMethod();
webClient.DownloadProgressChanged += myObject.ProgressReporter;
最后,请注意在订阅事件时不需要使用new DownloadProgressChangedEventHandler
,因为编译器可以自动推断它。
答案 1 :(得分:0)
webClient.DownloadProgressChanged += someOtherClassInstance.ProgressReporter
答案 2 :(得分:0)
如果您的外部事件处理程序位于名为foo的类中且处理程序是静态的,则您将传递foo.ProgressReport而不是ProgressReport。
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(foo.ProgressReport);
如果它不是静态的,那么你需要一个foo实例。
Foo myFoo = new Foo();
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(myFoo.ProgressReport);