Estoy usando webClient.DownloadFile()
para descargar un archivo. ¿Puedo establecer un tiempo de espera para esto para que no tarde tanto si no puede acceder al archivo?Establecer el tiempo de espera para webClient.DownloadFile()
Respuesta
Probar WebClient.DownloadFileAsync()
. Puede llamar al CancelAsync()
por temporizador con su propio tiempo de espera.
Mi respuesta viene de here
Se puede hacer una clase derivada, que establecerá la propiedad de tiempo de espera de la clase 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;
}
}
y se puede usar al igual que la clase WebClient de base .
Me encanta cuando las personas responden con código ... – kape123
Solo en caso de que alguien más encuentre este código útil tuve que configurar el tiempo de espera antes de llamar a base.GetWebRequest (dirección) – Darthtong
Resharper se queja un posible valor nulo para "resultado" y sugiere una verificación nula antes de establecer el valor de Tiempo de espera para WebRequest. Al observar el código descompilado, parece imposible a menos que proporcione un WebRequestModules personalizado en su web.config, pero para una respuesta tan votada, lo agregaría por si acaso. –
Suponiendo que quería hacer esto de forma sincrónica, utilizando el método WebClient.OpenRead (...) y establecer el tiempo de espera en la corriente que vuelve le dará el resultado deseado:
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);
}
}
}
}
Derivado de cliente Web y anulando GetWebRequest (...) para establecer el tiempo de espera que @Beniamin sugirió, no funcionó para mí como, pero esto fue así.
@jeffymorris no funcionó para mí. Todavía recibo WebException diciendo "la solicitud fue abortada - la operación ha expirado" incluso si especifico 'stream.ReadTimeout' más grande de lo que realmente tomó para ejecutar la solicitud – chester89
@jeffymoris en el otro, la solución con la subclase webclient no funciona bien, entonces probablemente sea un problema en el lado del servidor – chester89
- 1. Establecer el tiempo de espera del unicornio
- 2. Establecer el tiempo de espera en simplexml_load_file
- 3. establecer el tiempo de espera para el socket recibir
- 4. Establecer el tiempo de espera para ajax (jQuery)
- 5. ¿Puedo establecer el tiempo de espera para UdpClient en C#?
- 6. Establecer un límite de tiempo de espera para readLine()?
- 7. Tiempo de espera para BackgroundWorker
- 8. Establecer un tiempo de espera para leer stdin
- 9. establecer el diálogo de tiempo de espera en android?
- 10. Tiempo de espera para thread.join()
- 11. Establecer el tiempo de espera de conexión SSH
- 12. Cómo establecer el tiempo de espera en NSURLRequest en iphone
- 13. Aumentando el tiempo de espera para .ashx
- 14. HttpWebRequest Tiempo de espera
- 15. Cómo establecer el tiempo de espera para el evento Webbrowser navegar
- 16. Establecer tiempo de espera de solicitud OLE desde C++
- 17. Hibernar: ¿establecer tiempo de espera de consulta predeterminado?
- 18. Cómo configurar el tiempo de espera para get_meta_tags() & get_headers()
- 19. ¿Cómo diferenciar cuándo espera (tiempo de espera prolongado) salir para notificar o tiempo de espera?
- 20. ¿Hay alguna manera de establecer el tiempo de espera de respuesta para Indy Tidhttp?
- 21. El tiempo de espera para SocketChannel no funciona
- 22. Establecer un tiempo de espera para una función específica/bloque de código (no todo el script)?
- 23. Cómo establecer un tiempo de espera para el método File.Create en la unidad de red?
- 24. Cómo establecer el tiempo de espera en infinito para evitar MongoCursorTimeoutException en php
- 25. tiempo de espera para recvfrom Winsock
- 26. Tiempo de espera con jQuery.get()
- 27. Tiempo de espera agotado - Tiempo de espera agotado
- 28. hibernate Excedido el tiempo de espera de espera de bloqueo;
- 29. Agregar un tiempo de espera para getchar()
- 30. Tiempo de espera predeterminado para HttpComponent Client
No quiero usar el cronómetro ni el cronómetro. Quiero un enfoque incorporado de hack o api. Usar el cronómetro/cronómetro me cuesta un hilo adicional para mirar, mientras que esta característica quizás ya esté implementada, entonces, ¿por qué reinventar la rueda –
@Kilanny: luego ir con la solución de otra respuesta. O use HttpClient y establezca la propiedad Timeout. También tenga en cuenta que esta respuesta es de 2009. – abatishchev
en .Net 4.5+ también puede usar 'var taskDownload = client.DownloadFileTaskAsync (new Uri (" http: // localhost/folder ")," filename ")' y luego 'taskDownload .Wait (TimeSpan.FromSeconds (5)); ' – itsho