C# 问题进度条运行直到我的进程完成(在数据库中加载文件)

C# 问题进度条运行直到我的进程完成(在数据库中加载文件),c#,excel,visual-studio-2012,progress-bar,backgroundworker,C#,Excel,Visual Studio 2012,Progress Bar,Backgroundworker,当我点击提交按钮时,我想在将数据导入数据库的那一刻取得这一进展。我想在导入数据的那一刻,而不是在等待导入数据的那一刻,取得在线进展的结果 我多次尝试使methode工作,但在这里我遇到了错误bgw.RunWorkerAsync public ImportAvancement() { InitializeComponent(); label11.Text = ""; label12.Text = ""; } BackgroundWorker bgw = new Backgr

当我点击提交按钮时,我想在将数据导入数据库的那一刻取得这一进展。我想在导入数据的那一刻,而不是在等待导入数据的那一刻,取得在线进展的结果

我多次尝试使methode工作,但在这里我遇到了错误bgw.RunWorkerAsync

public ImportAvancement()
{
    InitializeComponent();
    label11.Text = "";
    label12.Text = "";
}
BackgroundWorker bgw = new BackgroundWorker();    
DataSet dataset;
private void ImportAvancement_Load(object sender, EventArgs e)
{
    label2.Visible = false;
    label3.Visible = false;
    label4.Visible = false;
    label5.Visible = false;
    label6.Visible = false;
    label7.Visible = false;
    label8.Visible = false;
    label9.Visible = false;
    label10.Visible = false;

    dataset= Models.Loadcombo.LoadComboEFP();
    comboBox1.DisplayMember = "nom_Etab";
    comboBox1.ValueMember = "nom_Etab";
    comboBox1.DataSource = dataset.Tables["TEFP"];
}
OpenFileDialog open = new OpenFileDialog();
private void button1_Click(object sender, EventArgs e)
{
    open.ShowDialog();
}
int VALueSector = 0;

int ValueLevel = 0;
int ValueAffilate = 0;

public void work()
{
    bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
    bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged);
    bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
    bgw.WorkerReportsProgress = true;
    bgw.RunWorkerAsync();
}
private void SUBMIT_Click(object sender, EventArgs e)
{
    TotalValue = 0;

    VALueSector = Controller.MethodeImportation.ImportSector(open.FileName);
     TotalValue += VALueSector;
    if (VALueSector == 0)
    {
        label2.Text = "The SECTORS  ALREADY EXIST";
    }
    else
    {
        label2.Text = ("" + VALueSector.ToString() + " new Sector have been imported");

    }

    ValueLevel = Controller.MethodeImportation.ImportLevel(open.FileName);
    TotalValue += ValueLevel;
    if (ValeurEFPSECTEUR == 0)
    {
        label4.Text = "The Levels are already Exist";
    }
    else
    {
        label4.Text = ("" + ValueLevel.ToString() + " new levels Have been imported");
    }

    ValueAffilate = Controller.MethodeImportation.ImportAffilate(open.FileName);
     TotalValue += ValueAffilate;
    if (ValueAffilate== 0)
    {
        label5.Text = "The Affilate already Exist";
    }
    else
    {
        label5.Text = ("" + ValueAffilate.ToString() + " New Affilate Have been imported");
    }

    work();
}
void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    progressBarX1.Visible = false;
    label2.Visible = true;
    label3.Visible = true;
    label4.Visible = true;
    label5.Visible = true;
    label6.Visible = true;
    label7.Visible = true;
    label8.Visible = true;
    label9.Visible = true;
    label10.Visible = true;
}

void bgw_DoWork(object sender, DoWorkEventArgs e)
{
   if (totalValue == 0)
   {
       bgw.ReportProgress(0, 0);
   }
   else
   {
       for (int i = 0; i <= totalValue; i++) //some number (total)
       {
           System.Threading.Thread.Sleep(100);
           int percents = (i * 100) / totalValue;
           bgw.ReportProgress(percents, i);
       }
   }
}
void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    progressBarX1.Value = e.ProgressPercentage;
    label11.Text = String.Format("Progress: {0} %", e.ProgressPercentage);
    label12.Text = String.Format("Total items transfered: {0}", e.UserState);
}
最后我得到了这个错误:

BackgroundWorker当前正忙,无法同时运行多个任务

我使用ado.net模式连接,因此在导入数据时需要一些时间,我希望浪费这些时间,他将在进度条中,同时计算总计当前总计,而不是在计算最终总计之后

我已经像这样编辑了我的方法。没有错误,但是它被阻止了

public void work()
{
    bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
    bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged);
    bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
    bgw.WorkerReportsProgress = true;
    bgw.RunWorkerAsync();
    while (this.bgw.IsBusy)
    {
        progressBarX1.Increment(1);
        bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
        bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged);
        bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
        // Keep UI messages moving, so the form remains
        // responsive during the asynchronous operation.
        Application.DoEvents();
    }
}

你能分享错误文本吗?我已经编辑了我的头条消息,我已经添加了更多细节!!
public void work()
{
    bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
    bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged);
    bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
    bgw.WorkerReportsProgress = true;
    bgw.RunWorkerAsync();
    while (this.bgw.IsBusy)
    {
        progressBarX1.Increment(1);
        bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
        bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged);
        bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
        // Keep UI messages moving, so the form remains
        // responsive during the asynchronous operation.
        Application.DoEvents();
    }
}