Search code examples
c#backgroundworker

backgroundWorker for SMO .PrecentComplete


I have found a few articles on how to create a background worker to report progress as to not freeze the ui but I have had not luck. Here is what I have going on

progressBar on Form1.cs
BackupTypes.cs - separate class

I am using the following to report the progress to the progressBar from BackupTypes.cs

bkup.PercentComplete += new PrecentEcompleteEventHandler(Event_PercentComplete);

Here is the Event_PercentComplete

private static void Event_PercentComplete(object sender, PercentCompleteEventArgs e)
{
  Form1 form = (Form1)Application.OpenForms["Form1"];
  form.progressBar.Value = e.Percent;
}

How can I make a backgroundworker report the progress from BackupTypes.cs to Form1.cs and not freeze the UI?

Edit Background worker

Here is my background worker and what do ya know if is working now maybe I just needed to take a step away from it

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        Server databaseServer = new Server(dbServer);
            try
            {
                /**
                 * 
                 * Connection to the database
                 * 
                **/
                databaseServer.ConnectionContext.LoginSecure = false;
                databaseServer.ConnectionContext.Login = dbUser;
                databaseServer.ConnectionContext.Password = dbPass;
                databaseServer.ConnectionContext.Connect();



                if (rbFullBackup.Checked == true)
                {
                    dbType = "FULL";
                    int nDay = Convert.ToInt32(cbExperationDate.SelectedValue);
                    BackupTypes.FullBackup("name", "desc", databaseServer, dbDatabase, tbBackupLocation.Text, nDay, dbType);

                }

                if (rbDifferentialBackup.Checked == true)
                {
                    dbType = "DIFFERENTIAL";
                    int nDay = Convert.ToInt32(cbExperationDate.SelectedValue);
                    BackupTypes.DifferentialBackup("name", "desc", databaseServer, dbDatabase, tbBackupLocation.Text, nDay, dbType);
                }

                if (rbLogBackup.Checked == true)
                {
                    dbType = "LOG";
                    int nDay = Convert.ToInt32(cbExperationDate.SelectedValue);
                    BackupTypes.LogBackup("name", "desc", databaseServer, dbDatabase, tbBackupLocation.Text, nDay, dbType);
                }

                if (rbCompressedBackup.Checked == true)
                {
                    dbType = "COMPRESSED";
                    int nDay = Convert.ToInt32(cbExperationDate.SelectedValue);
                    BackupTypes.LogBackup("name", "desc", databaseServer, dbDatabase, tbBackupLocation.Text, nDay, dbType);
                }

                if (rbMailBackup.Checked == true)
                {
                    dbType = "MAIL";
                    int nDay = Convert.ToInt32(cbExperationDate.SelectedValue);
                    BackupTypes.MailBackup("name", "desc", databaseServer, dbMail, tbBackupLocation.Text, nDay, dbType);
                }

            }
            catch (SqlServerManagementException ex)
            {
                /**
                 * 
                 * Write errors to log file
                 * 
                 **/
                if (LogStatus == true)
                {
                    Output(ex.Message);
                    if (DebugStatus == true)
                    {
                        Output(ex.ToString());
                    }
                    Output(" ");
                }

            }
            finally
            {
                if (databaseServer.ConnectionContext.IsOpen)
                {
                    /**
                     * 
                     * Close the connection to the database
                     * 
                    **/
                    databaseServer.ConnectionContext.Disconnect();
                }
            }

    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        progressBar.Value = e.ProgressPercentage;
    }

Then from my BackupTypes.cs to report the changes

   form.backgroundWorker1.ReportProgress(e.Percent);

Solution

  • You need to call ReportProgress on the BackgroundWorker inside your DoWork method