Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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# 使用后台工作程序执行sql命令时的进度条_C#_Mysql_Progress Bar_Backgroundworker - Fatal编程技术网

C# 使用后台工作程序执行sql命令时的进度条

C# 使用后台工作程序执行sql命令时的进度条,c#,mysql,progress-bar,backgroundworker,C#,Mysql,Progress Bar,Backgroundworker,我正在尝试创建一个进度条,当单击“计算”按钮时会显示该进度条。并运行,直到execute完成该过程。我正在使用后台工作人员进行操作。而进度条只是一个简单的选框,所以如果进程结束,我希望看到可见属性 这是初始化 backgroundworker1 = new System.ComponentModel.BackgroundWorker(); backgroundworker1.DoWork += new System.ComponentModel.DoWorkEventHandle

我正在尝试创建一个进度条,当单击“计算”按钮时会显示该进度条。并运行,直到execute完成该过程。我正在使用后台工作人员进行操作。而进度条只是一个简单的选框,所以如果进程结束,我希望看到可见属性

这是初始化

backgroundworker1 = new System.ComponentModel.BackgroundWorker();
        backgroundworker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
        backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
因此,首先单击“计算”按钮时:

    private void buttonCalculate_Click(object sender, EventArgs e)
    {
         //execute the background worker 
        this.backgroundworker1.RunWorkerAsync();
        while (this.backgroundworker1.IsBusy)
        {
            progressBar1.Visible=true;
            Application.DoEvents();
        }
    }
下面是backgroundworker1\u DoWork事件

 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            connection = new MySqlConnection(prop.connectionString);
            string query = "Call telephelyi_2013()";

                if (this.OpenConnection() == true)
                {

                    MySqlCommand cmd = new MySqlCommand();
                    cmd = connection.CreateCommand();
                    cmd.CommandText = query;
                    cmd.ExecuteNonQuery();
                }

        }
最后当手术结束时,应该这样做

    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        progressBar1.Visible = false;
        MessageBox.Show("Számítás befejzve!");
    }
但毕竟,当我运行程序并单击“计算”按钮时,进度条会显示出来,移动永远不会结束。我还看到计算机正在计算一段时间,然后停止,但我从来没有得到结束信息


出什么问题了?

您需要启动后台工作线程,然后让它去,而不是等待工作线程来阻止主线程。使用
DoEvents
只不过是一种黑客行为,它会导致比它所能解决的问题更多的问题,除非您非常熟悉它的功能、工作方式以及应该使用它的时间

只需单击按钮即可执行以下操作:

this.backgroundworker1.RunWorkerAsync();
progressBar1.Visible=true;

瞧。

你只需要启动后台工作程序,然后让它去,而不是等待工作程序来拖住主线程。使用
DoEvents
只不过是一种黑客行为,它会导致比它所能解决的问题更多的问题,除非您非常熟悉它的功能、工作方式以及应该使用它的时间

只需单击按钮即可执行以下操作:

this.backgroundworker1.RunWorkerAsync();
progressBar1.Visible=true;

瞧。

它仍然没有进入后台工作1_runworker完成任务。但是我看到这个程序做了它必须做的。后台工作人员是如何知道程序是否完成的?@balage90后台工作人员被编写为在
DoWork
事件完成运行时触发事件。它仍然不会进入backgroundWorker1\u RunWorkerCompleted任务。但是我看到这个程序做了它必须做的。后台工作人员是如何知道程序是否完成的?@balage90后台工作人员被编写为在
DoWork
事件完成运行时触发事件。