تعيين مهلة لـ WebClient.DownloadFile ()
سؤال
أنا استخدم webClient.DownloadFile()
لتنزيل ملف ، هل يمكنني تعيين مهلة لذلك حتى لا يستغرق وقتًا طويلاً إذا لم يتمكن من الوصول إلى الملف؟
المحلول
محاولة WebClient.DownloadFileAsync()
. تستطيع الاتصال CancelAsync()
بواسطة مؤقت مع مهلة الخاصة بك.
نصائح أخرى
إجابتي تأتي من هنا
يمكنك عمل فئة مشتقة ، والتي ستعطف خاصية المهلة للقاعدة 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;
}
}
ويمكنك استخدامه تمامًا مثل فئة WebClient الأساسية.
على افتراض أنك ترغب في القيام بذلك بشكل متزامن ، باستخدام طريقة webclient.openRead (...) وتعيين المهلة على الدفق الذي يعيده سيعطيك النتيجة المرجوة:
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);
}
}
}
}
الاستخلاص من webclient والتجاوز getWebRequest (...) لتعيين المهلة المقترحة beniamin ، لم ينجح بالنسبة لي ، ولكن هذا فعل.
لا تنتمي إلى StackOverflow