实在搞不定了,不知道为什么没法调用RunWorkerCompleted()方法,即使执行了ReportProgress方法也不成求解???  public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
           backgroundWorker1.WorkerReportsProgress = true;   
           backgroundWorker1.WorkerSupportsCancellation = true;  
        }
        private void button3_Click(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync();
            label1.Visible = true;
        }        private void button2_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
        }
        int iProgressValue = 1;
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            
            BackgroundWorker bgwValue = (BackgroundWorker)sender;
            backgroundWorker1.ReportProgress(iProgressValue);
            parse_file();
            if (parse_file() == true)
            {
                backgroundWorker1.ReportProgress(100);
            }            
        }
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            listBox1.Items.Clear();
            label1.Visible = false;
            MessageBox.Show("Done");
        }
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;        }
        private bool parse_file()
        {
            bool parse_return = false;
            //要执行的语句 .... 略去...........略去.........................略去
            //要执行的语句 .... 略去...........略去.........................略去
            parse_return = true;
            return parse_return;
        }        private void button4_Click(object sender, EventArgs e)
        {
            if (backgroundWorker1.IsBusy)
            {
                backgroundWorker1.CancelAsync();
            }
        }
    }

解决方案 »

  1.   

    backgroundWorker1.ReportProgress(iProgressValue);
    这段代码放到 DoWork 中有问题吧?? 我这里测试还回报错DoWork干的活是:比较耗时的放里面 (如查询数据库)backgroundWorker1.ReportProgress(iProgressValue); 应该是放到RunWorkerCompleted中吧
      

  2.   

    parse_file()方法是比较耗时的操作,我把具体语句省去了
    我的问题是无论如何也无法调用RunWorkerCompleted方法
    所以当parse_file()执行完后,我讲ReportProgress()的值设为100,尝试调用RunWorkerCompleted,还是不成        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                
                BackgroundWorker bgwValue = (BackgroundWorker)sender;
                backgroundWorker1.ReportProgress(iProgressValue);
                parse_file(); 
                if (parse_file() == true)
                {
                    backgroundWorker1.ReportProgress(100);
                }            
            }
      

  3.   

    看你的代码好像是拉的一个backgroundWorker组件1.那么在属性栏[事件]里看下  backgroundWorker1_RunWorkerCompleted()方法是否绑定给了 RunWorkerCompleted事件2.把 backgroundWorker1.ReportProgress(100);
         backgroundWorker1.ReportProgress(iProgressValue);
    //先注释掉看看
      

  4.   

                backgroundWorker1.RunWorkerCompleted+=new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
                backgroundWorker1.ProgressChanged+=new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);上面的代码没看到,你在Form1.Designer.cs中找找,如果没有那你就这样改
     public Form1()
            {
                InitializeComponent();
               backgroundWorker1.WorkerReportsProgress = true;   
               backgroundWorker1.WorkerSupportsCancellation = true;
    backgroundWorker1.RunWorkerCompleted+=new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
                backgroundWorker1.ProgressChanged+=new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);          }