title: invalidOperationException while using delegate in thread
body: <p>I divided my programme in 3 layers; GUI, BL, IO and tried to grap files from my server to my pc. I made it multi threaded and zorks fine, but when i tried to add a delegate to it for sending messages from my IO to my GUI, it troubels me. It said something like: </p>
  
  <blockquote>
    <p>It is not allowed to perform an operation through various threads: it
    was from another thread had access to the control label download
    progress than the thread on which the element is created.</p>
  </blockquote>
  
  <p>What i have is this:</p>
  
  <p>GUI</p>
  
  <pre><code>private void buttonDownload_Click(object sender, EventArgs e)
  {
      download = new BL_DataTransfer(Wat.FILM, titel, this.downloadDel);
      t = new Thread(new ThreadStart(download.DownLoadFiles));    
      t.Start();
  }
  private void UpdateDownloadLabel(string File)
  {
          labelDownloadProgress.Text = "Downloading: " + File;
  }
  </code></pre>
  
  <p>BL</p>
  
  <pre><code>    public void DownLoadFiles()
      {
          //bestanden zoeken op server
          string map = BASEDIR + this.wat.ToString() + @"\" + this.titel + @"\";
          string[] files = IO_DataTransfer.GrapFiles(map);
  
          //pad omvormen
          string[] downloadFiles = this.VeranderNaarDownLoadPad(files,this.titel);
          IO_DataTransfer.DownloadFiles(@".\" + this.titel + @"\", files, downloadFiles, this.obserdelegate);
      }
  </code></pre>
  
  <p>IO</p>
  
  <pre><code>    public static void DownloadFiles(string map, string[] bestanden, string[] uploadPlaats, ObserverDelegate observerDelegete)
      {
          try
          {
              Directory.CreateDirectory(map);
  
              for (int i = 0; i &lt; bestanden.Count(); i++)
              {
                  observerDelegete(bestanden[i]);
                  File.Copy(bestanden[i], uploadPlaats[i]);
              }
          }
          catch (UnauthorizedAccessException uoe) { }
          catch (FileNotFoundException fnfe) { }
          catch (Exception e) { }        
      }
  </code></pre>
  
  <p>Delgate</p>
  
  <pre><code> public delegate void ObserverDelegate(string fileName);
  </code></pre>