I've created a copy file method that i would like to wrap around a background worker. I would like the copy file method to report a string back to the UI thread (change a label) on the current file name its on. I can't seem to get it to work and i'm getting cross thread ui errors. Here is my code.
Do Work
      //Textbox Array Values
        // 0 = computername
        // 1 = username
        // 2 = password
        string[] tbvalues = (string[])e.Argument;
        string computer = tbvalues[0];
        string user = tbvalues[1];
        string pass = tbvalues[2];
        string userfavorites = @"\\" + computer + @"\C$\Users\" + user + @"\Favorites";
        string hdrivepath = @"\\dist-win-file-3\homes\" + user + @"\Favorites";
        string SourcePath = userfavorites;
        string DestinationPath = hdrivepath;
This part is a custom class used to impersonate a user
        using ( new Impersonator( user, "Domain.org", pass ) )
        {
            DirectoryInfo sp = new DirectoryInfo(SourcePath);
            DirectoryInfo dp = new DirectoryInfo(DestinationPath);
            CopyAll(sp, dp, bgwBackup, e);
        }
}
Method
   public void CopyAll(DirectoryInfo source, DirectoryInfo target, BackgroundWorker worker, DoWorkEventArgs e)
    {
        // Check if the target directory exists, if not, create it.
        if (Directory.Exists(target.FullName) == false)
        {
            Directory.CreateDirectory(target.FullName);
        }
        // Copy each file into it’s new directory.
        foreach (FileInfo fi in source.GetFiles())
        {
            //THIS IS THE STRING I WOULD LIKE TO RELAY TO THE BACKGROUND WORKER REPORT PROGRESS
            string currentfile = "Copying " + target.FullName.ToString() + fi.Name.ToString();                
            fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
            worker.ReportProgress(0, currentfile);
        }
        // Copy each subdirectory using recursion.
        foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
        {
            DirectoryInfo nextTargetSubDir =
                target.CreateSubdirectory(diSourceSubDir.Name);
            CopyAll(diSourceSubDir, nextTargetSubDir, bgwBackup, e);
        }
    }
    private void cboBackuppwdshow_CheckedChanged(object sender, EventArgs e)
    {
        if (cboBackuppwdshow.Checked == true)
        {
            txtBackuppwd.UseSystemPasswordChar = false;
        }
        else
        {
            txtBackuppwd.UseSystemPasswordChar = true;
        }
    }
Report Progress
 private void bgwBackup_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        lblBackupStatus.Text = e.UserState.ToString();
    }
Button Event
 private void btnBackupqueue_Click(object sender, EventArgs e)
    {
        // Kickoff the worker thread to begin it's DoWork function.
        string[] tbvalues = {ddlBackupselectcomp.Text, ddlBackupselectuser.Text, txtBackuppwd.Text};
        backupWorker.RunWorkerAsync(tbvalues);
        lblBackupStatus.Text = "Backup process started please wait... ";
    }
Any suggestions ? Thanks!
 
    