3

MSDN ドキュメントにWebClient.DownloadDataAsyncは、そのメソッドの呼び出しから発生する可能性がある 2 つの潜在的な例外がリストされています。

例外:

  • ArgumentNullException - アドレス パラメータが null です。
  • WebException - BaseAddress とアドレスを組み合わせて形成された URI が無効です。-Or- リソースのダウンロード中にエラーが発生しました。

このコードが呼び出された時点でこれらの例外が発生する可能性があることは間違いありませんが、実際にはその実行行から発生するのでしょうか、それとも発生したDownloadDataCompletedイベントのe.Errorプロパティでのみ発生するのでしょうか?

言い換えれば、try/のcatch周りWebClient.DownloadDataAsyncは実際に何かをキャッチするのでしょうか、それとも に表示される可能性のあるエラーを説明しているだけなのe.Errorでしょうか?

using (WebClient webClient = new WebClient()) {
    webClient.DownloadDataCompleted += (sender, e) => {
        if (e.Error != null) {
            // Exceptions definitely available here.
            Console.WriteLine(e.Error.Message);
        }
        else {
            Console.WriteLine("Success!");
        }
    };
    try {
        webClient.DownloadDataAsync(someUri);
    }
    catch {
        // Would this ever be hit?
        Console.WriteLine("Caught an exception from DownloadDataAsync.");
    }
}

簡単な 404 エラーを試してみたところ、catch ブロックはヒットしませんでした (e.Errorsコードはヒットしました) が、ダウンロード呼び出し自体から他の状況がスローされるかどうかはわかりませんでした。

4

1 に答える 1

1

はい、直接DownloadDataAsync投げArgumentNullExceptionます。また、スローNotSupportedExceptionUriFormatExceptionます。ただし、すべてWebExceptionのsはコールバック(つまりイベント)を介して送信されます。

于 2013-02-20T22:20:52.930 に答える