3

如果我的问题措辞不当,我提前道歉。

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

webClient.DownloadProgressChanged +=
    new DownloadProgressChangedEventHandler(ProgressReporter);

如何将 设置DownloadProgressChangedEventHandler为类之外的方法?

谢谢。

4

3 回答 3

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最后,注意订阅事件时不需要使用,因为编译器会自动推导出来。

于 2012-06-27T22:23:05.187 回答
0
webClient.DownloadProgressChanged += someOtherClassInstance.ProgressReporter
于 2012-06-27T22:23:22.727 回答
0

如果您的外部事件处理程序位于名为 foo 的类中并且该处理程序是静态的,则您将传递 foo.ProgressReport 而不是 ProgressReport。

webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(foo.ProgressReport);

如果它不是静态的,那么你需要一个 foo 的实例。

Foo myFoo = new Foo();
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(myFoo.ProgressReport);
于 2012-06-27T22:26:37.030 回答