Pergunta

estou a usar webClient.DownloadFile() Para baixar um arquivo, posso definir um tempo limite para isso para que não demore tanto se não puder acessar o arquivo?

Foi útil?

Solução

Tentar WebClient.DownloadFileAsync(). Você pode ligar CancelAsync() por cronômetro com seu próprio tempo limite.

Outras dicas

Minha resposta vem de aqui

Você pode fazer uma classe derivada, que definirá a propriedade de tempo limite da base WebRequest classe:

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 você pode usá -lo como a classe WebClient Base.

Supondo que você queria fazer isso de maneira síncrona, usando o método webclient.openRead (...) e definindo o tempo limite no fluxo que ele retorna fornecerá o resultado desejado:

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

Derivando do webclient e o GetWebRequest (...) para definir o tempo limite @Beniamin sugeriu, não funcionou para mim como, mas isso aconteceu.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top