title: wb.DownloadFileAsync throw "WebClient does not support concurrent I/O operations." exception
body: <p>I need help with this code</p>
  
  <pre><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 &amp;&amp; wb != null)
      {
          wb.CancelAsync();
      }
  }
  </code></pre>