wb.DownloadFileAsync throw "WebClient does not support concurrent I/O operations." exception
15,861
When calling DownloadFileAsync method you have to make sure it completes before trying to download again.
This answer will help you.
Author by
Umut Akkaya
Updated on June 13, 2022Comments
-
Umut Akkaya almost 2 years
I need help with this code
#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(); } }