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 というクラスにあり、そのハンドラーが静的である場合、ProgressReport の代わりに foo.ProgressReport を渡します。

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

静的でない場合は、foo のインスタンスが必要です。

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