Domanda

Sto usando webClient.DownloadFile () per scaricare un file posso impostare un timeout per questo in modo che non ci vorrà così tanto tempo se non può accedere al file?

È stato utile?

Soluzione

Prova WebClient.DownloadFileAsync () . Puoi chiamare CancelAsync () tramite timer con il tuo timeout.

Altri suggerimenti

La mia risposta arriva da qui

Puoi creare una classe derivata, che imposterà la proprietà di timeout della classe base 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;
    }
}

e puoi usarlo proprio come la classe WebClient di base.

Supponendo che tu volessi farlo in modo sincrono, usando il metodo WebClient.OpenRead (...) e impostando il timeout sullo Stream che restituisce otterrai il risultato desiderato:

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

Derivare da WebClient e sovrascrivere GetWebRequest (...) per impostare il timeout suggerito da @Beniamin, non ha funzionato per me, ma ha funzionato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top