我不知道有任何额外的超时属性可以实现您正在寻找的结果。想到的第一个想法是附加一个处理程序DownloadProgressChanged
,它将更新一个标志以指示已收到数据(但并不总是准确)。
使用Timer
orEventWaitHandle
然后您可以在短时间内阻塞(或处理异步,如果您愿意)并评估是否已收到任何数据。下面的代码不是一个完整的例子,而是一个关于如何实现它的想法。
using (var manualResetEvent = new ManualResetEvent(false))
using (var client = new WebClient())
{
client.DownloadProgressChanged += (sender, e) => manualResetEvent.Set();
client.DownloadDataAsync(new Uri("https://github.com/downloads/cbaxter/Harvester/Harvester.msi"));
if (!manualResetEvent.WaitOne(5000))
client.CancelAsync();
}
在上面的示例中,如果被调用,manualResetEvent.WaitOne
则将返回。您可能想要检查并仅设置非零值,但我认为您明白了吗?true
DownloadProgressChanged
e.BytesReceived > 0