سؤال

أنا استخدم 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 ، لم ينجح بالنسبة لي ، ولكن هذا فعل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top