我已经找到了一些关于如何创建背景工作人员以报告不冻结ui的进度的文章,但我运气不好。下面是我要做的事情
progressBar on Form1.cs
BackupTypes.cs - separate class我使用以下方法向progressBar报告BackupTypes.cs的进度
bkup.PercentComplete += new PrecentEcompleteEventHandler(Event_PercentComplete);这是Event_PercentComplete
private static void Event_PercentComplete(object sender, PercentCompleteEventArgs e)
{
Form1 form = (Form1)Application.OpenForms["Form1"];
form.progressBar.Value = e.Percent;
}如何让后台工作人员报告从BackupTypes.cs到Form1.cs的进度,而不冻结UI?
编辑后台工作人员
这是我的背景工作人员,你知道现在是否在工作,也许我只需要离开它一步
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;
}然后从我的BackupTypes.cs中报告这些更改
form.backgroundWorker1.ReportProgress(e.Percent);发布于 2013-11-12 17:53:03
您需要在ReportProgress方法中调用BackgroundWorker上的DoWork
https://stackoverflow.com/questions/19916209
复制相似问题