2017-03-01 73 views
-1

我有一个程序,其进度条在程序完成之前不会更新。我做了一些挖掘,并发现我需要制作一个后台工作人员,以便在我的while循环运行时进行更新。从示例中我只是没有得到我应该做的。有人可以向我解释如何设置它以及它在做什么吗?制作一个BackgroundWorker,使ProgressBar能够工作

int progressBar; 

private void button3_Click(object sender, EventArgs e) 
     { 

      try 
      { 
       while (y < PriDID.Count) 
       { 
        cmd.CommandText = "SELECT COUNT(*) FROM Accounts WHERE ACCT='" + ACCT[y] + "'"; 
        int count = Convert.ToInt32(cmd.ExecuteScalar()); 

        if (count < 1) 
        { 
         progressBar = (y/SDM_ACCT.Count) * 100; 
         progressBar1.Value = progressBar; 
         progressBar1.Update(); 
         Console.WriteLine(SDM_ACCT[y - 1]); 
         cmd.CommandText = @"INSERT INTO Accounts(SDM_ACCT,Description) 
             values(" + "'" + ACCT[y] + "'," + "'" + Comment[y] + ")"; 
         cmd.ExecuteNonQuery(); 
         y++; 
         recordCount++; 
        } 
        else 
        { 
         y++; 
        } 


        MessageBox.Show(recordCount + " unique records successfully loaded to the Database."); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Exception: " + ex.Message + " Please make sure you have selected a valid path for your CSV and database."); 
      } 

     } 
+0

你找到关于如何编写一个后台工作哪些信息,以及你有什么具体的问题与你的实现呢? – Servy

+0

我发现了这个,但我只是不明白如何适应我的。 http://stackoverflow.com/questions/6481304/how-to-use-a-backgroundworker –

+1

你有什么具体*问题适应你的情况?什么不适合你? – Servy

回答

1

我想如果你看看这个例子,你会知道你是如何做到的。我编写了一些值,并将变量命名为与您相同的变量。如果你知道运行while循环需要多长时间,你可以声明一个DoWork只写这个---> progressBarWorker.DoWork + =和双选项卡。你会得到一个DoWork处理器。并在事件处理程序可以使一个for循环)

对(INT I = 0;我< 100; i ++在)

{

Thread.Delay(100);

progressBarWorker.ReportProgress(i);

}

,然后把ProgressBarWorker.RunWorkerAsync();作为button3事件处理程序中的第一件事。

A BackroundWorker Example I made for you

+0

获取错误“此BackgroundWorker指出它不报告进度。修改WorkerReportsProgress以声明它报告进度。”我错过了什么? –

+0

您必须设置ProgressBarWorker.WorkerReportsProgress = true; –

+0

好的,这个例子给了我一个间歇性的进度条。有时候,我在'progressBarWorker.ReportProgress(y);'上得到一个错误''说这个操作已经有OperationCompleted调用它并且进一步的调用是非法的。“即使这是第一次尝试运行该程序。 –

相关问题