首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >backgroundWorker for SMO .PrecentComplete

backgroundWorker for SMO .PrecentComplete
EN

Stack Overflow用户
提问于 2013-11-11 21:22:08
回答 1查看 114关注 0票数 0

我已经找到了一些关于如何创建背景工作人员以报告不冻结ui的进度的文章,但我运气不好。下面是我要做的事情

代码语言:javascript
复制
progressBar on Form1.cs
BackupTypes.cs - separate class

我使用以下方法向progressBar报告BackupTypes.cs的进度

代码语言:javascript
复制
bkup.PercentComplete += new PrecentEcompleteEventHandler(Event_PercentComplete);

这是Event_PercentComplete

代码语言:javascript
复制
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?

编辑后台工作人员

这是我的背景工作人员,你知道现在是否在工作,也许我只需要离开它一步

代码语言:javascript
复制
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中报告这些更改

代码语言:javascript
复制
   form.backgroundWorker1.ReportProgress(e.Percent);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-12 17:53:03

您需要在ReportProgress方法中调用BackgroundWorker上的DoWork

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19916209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档