将AsyncCompletedEventHandler设置为类外的方法

时间:2012-06-27 22:20:41

标签: c# .net

如果我的问题措辞不当,我会事先道歉。

我正在利用WebClient从互联网上下载文件。要将DownloadProgressChangedEventHandler设置为同一类中的方法,我只需使用方法名称,例如

webClient.DownloadProgressChanged +=
    new DownloadProgressChangedEventHandler(ProgressReporter);

如何将DownloadProgressChangedEventHandler设置为课堂外的方法?

感谢。

3 个答案:

答案 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);