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.

Share:
15,861
Umut Akkaya
Author by

Umut Akkaya

Updated on June 13, 2022

Comments

  • Umut Akkaya
    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();
        }
    }