J'utilise webClient.DownloadFile()
pour télécharger un fichier. Puis-je définir un délai d'expiration pour que cela ne prenne pas autant de temps s'il ne peut pas accéder au fichier?
Essayez WebClient.DownloadFileAsync()
. Vous pouvez appeler CancelAsync()
par minuterie avec votre propre délai.
Ma réponse vient de ici
Vous pouvez créer une classe dérivée, qui définira la propriété timeout de la classe WebRequest
de base:
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 classe WebClient de base.
En supposant que vous souhaitiez le faire de manière synchrone, utilisez la méthode WebClient.OpenRead (...) et définissez le délai d'expiration du flux renvoyé pour 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ériver de WebClient et remplacer GetWebRequest (...) pour définir le délai d'expiration suggéré par @Beniamin n'a pas fonctionné pour moi, mais cela a fonctionné.