[c#] 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 (…) 메서드를 사용하여이 작업을 동 기적으로 수행하고 반환하는 Stream에 시간 제한을 설정하면 원하는 결과를 얻을 수 있습니다.

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이 제안한 시간 제한을 설정했지만 저에게 효과적이지 않았습니다.


답변