Frage Zeitüberschreitung für webClient.DownloadFile () festlegen


Ich benutze webClient.DownloadFile() kann ich eine Zeitlimit setzen, damit es nicht so lange dauert, wenn ich nicht auf die Datei zugreifen kann?


86
2018-03-02 10:16


Ursprung


Antworten:


Versuchen WebClient.DownloadFileAsync(). Du kannst anrufen CancelAsync() durch Timer mit Ihrem eigenen Timeout.


40
2018-03-02 10:39



Meine Antwort kommt von Hier

Sie können eine abgeleitete Klasse erstellen, die die Timeout-Eigenschaft der Basis definiert WebRequest Klasse:

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;
    }
}

und Sie können es wie die Basis-WebClient-Klasse verwenden.


246
2018-06-16 10:57



Angenommen, Sie möchten dies synchron ausführen, indem Sie die Methode WebClient.OpenRead (...) verwenden und das Zeitlimit für den zurückgegebenen Stream festlegen, erhalten Sie das gewünschte Ergebnis:

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);
               }
          }
     }
}

Ableiten von WebClient und Überschreiben von GetWebRequest (...), um das Zeitlimit @Beniamin vorgeschlagen zu setzen, funktionierte nicht für mich als, aber dies tat.


3
2018-01-25 18:37