簡體   English   中英

使用后台工作程序執行sql命令時的進度條

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM