wb.DownloadFileAsync抛出“WebClient不支持并发I / O操作。”exception

我需要有关此代码的帮助

#region Events public class DownloadProgressChangedEventArg { private long _ProgressPercentage; private long _BytesReceived; private long _TotalBytesToReceive; public DownloadProgressChangedEventArg(long BytesReceived, long TotalBytesToReceive) { _BytesReceived = BytesReceived; _TotalBytesToReceive = TotalBytesToReceive; _ProgressPercentage = BytesReceived * 100 / (TotalBytesToReceive); } public long BytesReceived { get { return _BytesReceived; } set { _BytesReceived = value; } } public long ProgressPercentage { get { return _ProgressPercentage; } set { _ProgressPercentage = value; } } public long TotalBytesToReceive { get { return _TotalBytesToReceive; } set { _TotalBytesToReceive = value; } } } public delegate void DownloadProgressChangedEventHandler(Api.GetSong.GetObject.Object Sender, DownloadProgressChangedEventArg e); public event DownloadProgressChangedEventHandler DownloadProgressChangedEvent; public class DownloadCompletedEventArg { private bool _Cancelled; private Exception _Error; public DownloadCompletedEventArg(Exception Error, bool Cancelled) { _Cancelled = Cancelled; _Error = Error; } public bool Cancelled { get { return _Cancelled; } set { _Cancelled = value; } } public Exception Error { get { return _Error; } set { _Error = value; } } } public delegate void DownloadCompletedEventHandler(Api.GetSong.GetObject.Object Sender, DownloadCompletedEventArg e); public event DownloadCompletedEventHandler DownloadCompletedEvent; #endregion WebClient wb; public void DownloadFileAsync(Api.GetSong.GetObject.Object Object, String FileLocation) { String DownloadLink = GetStreamUri(Object); String FileTitle = Object.Title + "." + Object.Type; String FileLocations = Path.Combine(FileLocation,FileTitle); if (!DownloadLink.StartsWith("rtmp")) { if (wb == null) { wb = new WebClient(); wb.DownloadFileCompleted += delegate(object sender, AsyncCompletedEventArgs e) { DownloadCompletedEvent(Object, new DownloadCompletedEventArg(e.Error, e.Cancelled)); }; wb.DownloadProgressChanged += delegate(object sender, DownloadProgressChangedEventArgs e) { DownloadProgressChangedEvent(Object, new DownloadProgressChangedEventArg(e.BytesReceived, e.TotalBytesToReceive)); }; } wb.DownloadFileAsync(new Uri(DownloadLink), FileLocations); //throw: //WebClient does not support concurrent I/O operations. } else { //Düzenlencek } } public void DownloadFileCancel() { if (wb.IsBusy && wb != null) { wb.CancelAsync(); } } 

调用DownloadFileAsync方法时,必须确保在再次尝试下载之前完成。

这个答案对你有帮助。