[英]How can I download a file using WebClient in C# with firing the eventhandlers and supporting the timeout property?
我正在開發一個C#項目,以從Internet下載文件。
在下載過程中,我將展示它們的進度。 我應該支持超時屬性。
我試圖使用WebClient類。 有DownloadFile ()和DownloadFileAsync ()函數。
在互聯網上,我可以找到一些有關使用線程手動設置超時方式的文章。
但是,我認為所有這些都不正確。 他們在整個下載過程中設置超時。 但是根據文件的大小,下載的時間是短還是長。
我怎么解決這個問題?
根據HttpWebRequest上的MSDN文檔 ,您需要自己使用線程來實現。
對於異步請求,客戶端應用程序有責任實現自己的超時機制。 下面的代碼示例演示如何執行此操作。
上面的鏈接實際上給出了使用線程池和ManualResetEvent的完整示例(該示例約為50-100行代碼)。
這是上述解決方案的症結所在,引用了MSDN示例中的代碼。
使用異步BeginGetResponse 。
IAsyncResult result =(IAsyncResult)myHttpWebRequest.BeginGetResponse(new AsyncCallback(RespCallback),myRequestState);
使用ThreadPool.RegisterWaitForSingleObject實現超時。
ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle,新的WaitOrTimerCallback(TimeoutCallback),myHttpWebRequest,DefaultTimeout,true);
使用ManualResetEvent來保存主線程,直到請求完成或超時。
公共靜態ManualResetEvent allDone =新的ManualResetEvent(false); allDone.WaitOne();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.