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