93

ファイルのダウンロードに使用webClient.DownloadFile()していますが、ファイルにアクセスできない場合でもそれほど時間がかからないように、タイムアウトを設定できますか?

4

3 に答える 3

260

私の答えはここから

WebRequest基本クラスのタイムアウト プロパティを設定する派生クラスを作成できます。

using System;
using System.Net;

public class WebDownload : WebClient
{
    /// <summary>
    /// Time in milliseconds
    /// </summary>
    public int Timeout { get; set; }

    public WebDownload() : this(60000) { }

    public WebDownload(int timeout)
    {
        this.Timeout = timeout;
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address);
        if (request != null)
        {
            request.Timeout = this.Timeout;
        }
        return request;
    }
}

基本の WebClient クラスと同じように使用できます。

于 2010-06-16T10:57:13.760 に答える
42

試してみてくださいWebClient.DownloadFileAsync()CancelAsync()独自のタイムアウトでタイマーで呼び出すことができます。

于 2009-03-02T10:39:22.760 に答える
3

これを同期的に実行したいと仮定すると、WebClient.OpenRead(...) メソッドを使用し、それが返す Stream にタイムアウトを設定すると、目的の結果が得られます。

using (var webClient = new WebClient())
using (var stream = webClient.OpenRead(streamingUri))
{
     if (stream != null)
     {
          stream.ReadTimeout = Timeout.Infinite;
          using (var reader = new StreamReader(stream, Encoding.UTF8, false))
          {
               string line;
               while ((line = reader.ReadLine()) != null)
               {
                    if (line != String.Empty)
                    {
                        Console.WriteLine("Count {0}", count++);
                    }
                    Console.WriteLine(line);
               }
          }
     }
}

WebClient から派生させ、GetWebRequest(...) をオーバーライドしてタイムアウト @Beniamin を設定することは、私にとってはうまくいきませんでしたが、これはうまくいきました。

于 2014-01-25T18:37:20.013 に答える