Frage

Ich bin mit webClient.DownloadFile() eine Datei herunterladen kann ich ein Timeout für diese so, dass es nicht so lange dauern, wenn es nicht auf die Datei zugreifen kann?

War es hilfreich?

Lösung

Versuchen WebClient.DownloadFileAsync(). Sie können CancelAsync() durch Timer mit Ihrem eigenen Timeout aufrufen.

Andere Tipps

Meine Antwort kommt von hier

Sie können eine abgeleitete Klasse machen, was die Zeit Eigenschaft der Basis WebRequest Klasse gesetzt werden:

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 genauso wie die Basis WebClient-Klasse verwenden.

Angenommen, Sie wollten diese synchron tun, die WebClient.OpenRead mit (...) Methode und Einstellen des Timeout auf den Strom, dass es wieder geben 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);
               }
          }
     }
}

von WebClient Ableitung und zwingende GetWebRequest (...), um das Timeout zu setzen @Beniamin vorgeschlagen, funktioniert nicht für mich wie, aber das tat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top