J'utilise webClient.DownloadFile()
pour télécharger un fichier puis-je définir un délai d'attente pour que cela ne prenne pas trop de temps s'il ne peut pas accéder au fichier?Définir le délai d'attente pour webClient.DownloadFile()
Répondre
Essayez WebClient.DownloadFileAsync()
. Vous pouvez appeler CancelAsync()
par minuterie avec votre propre délai d'attente.
Ma réponse vient de here
Vous pouvez faire une classe dérivée, qui définira la propriété de délai d'attente 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 classe de base WebClient .
amour quand les gens répondent avec le code ... – kape123
Juste incase quelqu'un d'autre vient à travers ce code utile que je devais définir le délai avant d'appeler base.GetWebRequest (adresse) – Darthtong
Resharper se plaint de une valeur nulle possible pour "result" et suggère une vérification null avant de définir la valeur Timeout à WebRequest. En regardant le code décompilé, il semble impossible à moins que vous fournissiez un WebRequestModules personnalisé dans votre web.config, mais pour une telle réponse mise à jour, je l'ajouterais juste au cas où. –
En supposant que vous vouliez faire de manière synchrone, en utilisant la WebClient.OpenRead (...) la méthode et le réglage du délai d'attente sur le flux qu'il retourne vous donnera 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érivant de WebClient et en remplaçant GetWebRequest (...) pour définir le délai d'attente @Beniamin suggéré, n'a pas fonctionné pour moi comme, mais cela a fonctionné.
@jeffymorris n'a pas fonctionné pour moi. Je reçois toujours WebException disant "la demande a été abandonnée - l'opération a expiré" même si je spécifie 'stream.ReadTimeout' plus grand que nécessaire pour exécuter la requête – chester89
@jeffymoris de l'autre, la solution avec sous-classe webclient n'a pas travailler soit, donc c'est probablement un problème du côté du serveur – chester89
- 1. Comment définir le délai d'expiration d'un programme?
- 2. Définir le délai d'attente sur jQuery .load
- 3. Comment définir le délai d'attente pour le pilote ODBC Ruby pour SQL Server?
- 4. Comment définir le délai d'expiration de la session dans web.config
- 5. Comment définir le délai d'attente de socket dans Ruby?
- 6. définir le délai d'expiration réseau et l'exception dans l'iPhone
- 7. Définir le délai de requête OLE à partir de C++
- 8. Comment définir le délai d'expiration de smtplib en python 2.4?
- 9. définir long délai d'attente pour la variable de session sélectionnée
- 10. Comment définir le délai de transaction pendant l'application de débogage
- 11. Définir le délai d'attente de l'info-bulle pour un composant particulier dans Java Swing
- 12. Quel est le délai idéal pour tester le code
- 13. Comment puis-je définir un délai d'attente sur HttpWebRequest.GetRequestStream?
- 14. Comment définir un délai pendant la recherche d'ejb à distance?
- 15. Erreurs WebClient.DownloadFile 404 avec des caractères HTML dans l'URI?
- 16. Comment définir le délai d'expiration des appels de service Web générés par Java Wireless Toolkit?
- 17. Délai d'attente Ruby pour Python?
- 18. Comment définir le délai d'attente lors du remplissage d'une table temporaire basée sur une requête complexe?
- 19. Silverlight 2: Définir le délai d'attente sur ADO.NET Data Services DataServiceContext
- 20. Comment définir le délai d'un script SQL Server à partir du script?
- 21. comment définir le délai d'expiration de la requête à partir de la chaîne de connexion SQL
- 22. Quel est le délai d'attente pour démarrer un service Windows?
- 23. Chargement de l'image WPF pour afficher le délai
- 24. Puis-je définir le délai d'attente de session pour une variable de session spécifiée différemment des autres variables de session?
- 25. Comment définir le délai d'expiration de la requête pour une action de contrôleur dans une application mvc asp.net
- 26. Délai de session WCF
- 27. Définir sqlAuthCookie pour le service d'exécution SSRS
- 28. G360 Execute 360 Ouvrir le dossier Délai
- 29. Délai prévu pour les flux YouTube?
- 30. Service WCF, comment augmenter le délai d'expiration?
Je ne veux pas utiliser la minuterie ou le chronomètre. Je veux une approche hack ou api intégrée. L'utilisation de la minuterie/chronomètre me coûte un fil supplémentaire pour regarder, alors que cette fonctionnalité peut-être déjà mis en œuvre, alors pourquoi réinventer la roue –
@Kilanny: puis aller avec la solution d'une autre réponse. Ou utilisez HttpClient et définissez la propriété Timeout. Notez également que cette réponse date de 2009. – abatishchev
dans .Net 4.5+, vous pouvez également utiliser 'var taskDownload = client.DownloadFileTaskAsync (nouveau Uri (" http: // localhost/dossier ")," puis "taskDownload .Wait (TimeSpan.FromSeconds (5)); ' – itsho