创建一个BackgroundWorker,以便ProgressBar可以正常工作

时间:2017-03-01 19:47:49

标签: c# progress-bar backgroundworker

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

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.");
            }

        }

1 个答案:

答案 0 :(得分:1)

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

for(int i = 0; i&lt; 100; i ++)

{

Thread.Delay(100);

progressBarWorker.ReportProgress(ⅰ);

}

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

HttpsServer