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);
You need to call ReportProgress on the BackgroundWorker inside your DoWork method