none
BackgroundWorker 问题 大神请进 RRS feed

  • 问题

  • private void button1_Click(object sender, EventArgs e)
            {
                BackgroundWorker Bgw = new BackgroundWorker();
                Bgw.WorkerSupportsCancellation = true;
                Bgw.DoWork += new DoWorkEventHandler(CreateKeyCategory_DoWork);
                //重新工作
                Bgw.RunWorkerAsync();
    
                while (true)
                {
                    if (!Bgw.IsBusy)
                    {
                        break;
                    }
                }
    
                MessageBox.Show("1111111");
            }
            /// <summary>
            ///  为热词建立检索分类的事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            public void CreateKeyCategory_DoWork(object sender, DoWorkEventArgs e)
            {
                Thread.Sleep(5000);
            }

    我想请问  为什么  CreateKeyCategory_DoWork 执行完了  IsBusy 还是为true  一直都在while 循环中 无法跳出  

    环境.net 4.0  请大神赐教  谢谢

    2014年6月30日 4:14

答案

  • 你好。

    你可以单步跟踪一下代码,会发现 button1_Click 方法执行完之前,BackgroundWorker 的 RunWorkerCompleted 事件不会被触发,那么 IsBusy 属性一直为True,所以while 一直跳不出。

    你可以利用 BackgroundWorker 的 ProgressChanged 事件来监视进度的变化,

    利用RunWorkerCompleted 事件来处理 BackgroundWorker 完成的逻辑。

    2014年6月30日 5:33