Je suis à l'aide d' webClient.DownloadFile()
à télécharger un fichier puis-je définir un délai d'attente de sorte qu'il ne prendra pas si longtemps, si elle ne peut pas accéder au fichier?
Réponses
Trop de publicités?Ma réponse vient d' ici
Vous pouvez faire une classe dérivée, qui permettra de définir le délai d'attente de la propriété de la 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;
}
}
et vous pouvez l'utiliser comme la base de classe WebClient.
En supposant que vous vouliez faire cela de manière synchrone, en utilisant le client web.OpenRead(...) la méthode et de définir le délai d'expiration sur le cours d'eau qu'il renvoie va vous donner le résultat souhaité:
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);
}
}
}
}
Découlant de WebClient et dominante GetWebRequest(...) pour définir le délai @Beniamin suggéré, n'a pas fonctionné pour moi aussi, mais ce n'.