[英]Progress bar while sql command execute using background worker
我試圖創建一個進度條,單擊“計算”按鈕時將顯示該進度條。 並運行直到執行完成過程。 我正在使用后台工作者進行操作。 而且進度條只是一個簡單的選取框,因此如果進程結束,我想撕裂false可見屬性。
這是初始化
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_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
只是一個hack,它將引起更多的問題,甚至無法解決,除非您非常熟悉它的功能,工作原理以及何時使用它。
只需單擊您的按鈕即可:
this.backgroundworker1.RunWorkerAsync();
progressBar1.Visible=true;
和瞧。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.