Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 做一个后台工作人员,这样ProgressBar就可以工作了_C#_Progress Bar_Backgroundworker - Fatal编程技术网

C# 做一个后台工作人员,这样ProgressBar就可以工作了

C# 做一个后台工作人员,这样ProgressBar就可以工作了,c#,progress-bar,backgroundworker,C#,Progress Bar,Backgroundworker,我有一个带有进度条的程序,在程序完成之前不会更新。我做了一些挖掘,发现我需要制作一个后台工作程序,以便在while循环运行时进行更新。从所展示的例子来看,我只是没有得到我应该做的。有人能给我解释一下如何设置它以及它在做什么吗 int progressBar; private void button3_Click(object sender, EventArgs e) { try { while (

我有一个带有进度条的程序,在程序完成之前不会更新。我做了一些挖掘,发现我需要制作一个后台工作程序,以便在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.");
            }

        }
intprogressbar;
私有无效按钮3\u单击(对象发送者,事件参数e)
{
尝试
{
而(y
我想,如果你看一下这个例子,你就会知道如何做到这一点。我创建了一些值,并将变量命名为与您相同的值。如果您知道while循环运行需要多长时间,您可以声明一个DoWork,只需编写这个-->progressBarWorker.DoWork+=和双制表符。你会得到一份嫁妆。在该eventhandler中,您可以创建一个for循环)

对于(int i=0;i<100;i++)

{

线程延迟(100)

progressBarWorker.ReportProgress(一)

}

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


关于如何编写后台工作人员,您发现了哪些信息?您在实现它时遇到了哪些具体问题?我发现了这些信息,但我不知道如何使其适应我所拥有的。你有什么具体的问题来适应你的情况?什么对你不起作用?只要推一个线程,或者做一些研究,随便哪个都行。我不知道在哪里放置
void-worker\u-DoWork(object-sender,doworkereventargs e)
,以使它正常工作。获取错误“此BackgroundWorker声明它不报告进度。修改WorkerReportsProgress以声明它确实报告进度。“我遗漏了什么?您必须设置ProgressBarWorker.WorkerReportsProgress=true;好的,这个示例给了我一个间歇工作的进度条。有时我在
ProgressBarWorker.ReportProgress(y);
上会出现错误,上面写着”此操作已调用OperationCompleted,进一步调用是非法的。“即使这是第一次尝试运行该程序。这取决于您为“progressBarWorker.Maximum”设置的值。当您“ReportProgress”时,该值与“Maximum”相同“它将导致引发RunWorkerCompleted事件并完成BackroundWorker。