如何在C#中使用WebClient下载文件,同时触发事件处理程序并支持超
我正在开发一个C#项目来从互联网上下载文件.
我会在下载过程中展示它们的进展. 我试过使用WebClient类. >当我使用DownloadFile()函数时,我可以设置Timeout属性,覆盖GetWebRequest()函数.但是,我无法触发事件处理程序,因此无法显示进度. 从互联网上,我可以找到一些关于使用线程手动设置超时的方法的文章. 但是,我认为所有这些都是不正确的.他们在整个下载过程中设置超时.但根据文件的大小,下载时间会很短或很长. 我怎么解决这个问题? 解决方法
根据
MSDN documentation on HttpWebRequest,您需要使用线程自己实现.
上面的链接实际上提供了一个完整的示例,说明如何使用线程池和ManualResetEvent(示例是大约50-100行代码). 以下是上述解决方案的关键,代码引自MSDN示例. >使用异步BeginGetResponse. IAsyncResult result =(IAsyncResult)myHttpWebRequest.BeginGetResponse(new AsyncCallback(RespCallback),myRequestState); ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle,new WaitOrTimerCallback(TimeoutCallback),myHttpWebRequest,DefaultTimeout,true); public static ManualResetEvent allDone = new ManualResetEvent(false);allDone.WaitOne(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |