使用.net 2.0新加的backgroundWorker控件进行多线程的操作,其中backgroundWorker下的函数ProgressChanged是负责报告当前程序进度的,这部分代码如下
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            this.changeFormat((data)e.Argument , worker, e);
        }        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            toolStripStatusLabel1.Text = "正在格式转换...." + e.ProgressPercentage + "%";
            toolStripProgressBar1.Value = e.ProgressPercentage;
            if (e.ProgressPercentage == 100)
            {
                MessageBox.Show("格式转换成功!");
            }
            this.Refresh();
        }
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.Cursor = Cursors.Default;            
        }
其中        backgroundWorker1.WorkerReportsProgress = true;
            backgroundWorker1.WorkerSupportsCancellation = true;
现在就是不知道哪里的原因,无法调用backgroundWorker1_ProgressChanged这个函数,也就是说辅助线程是否报告进度无法实现,不明白哪里出错了。

解决方案 »

  1.   

    this.changeFormat((data)e.Argument , worker, e)是做什么的?
      

  2.   

    ReportProgress这个方法调了么?
      

  3.   

    事件是发生的,而不是调用的,事件发生时会自动调用相应事件处理代码
    可以用ReportProgress方法,引发 ProgressChanged事件
      

  4.   

    你需要在backgroundWorker1_DoWork中调用worker.ReportProgress这个方法
    才会触发ProgressChanged事件
      

  5.   

    http://www.cnblogs.com/idior/archive/2005/08/18/217796.html
      

  6.   

    回楼上,例子我看过了,但我还是不明白错在哪里,例子中也没有在backgroundWorker1_DoWork中调用worker.ReportProgress这个方法啊,我尝试在backgroundWorker1_DoWork中调用worker.ReportProgress这个方法,仍然没反应,另外,this.changeFormat((data)e.Argument , worker, e);
    是我要运行的消耗时间的一个函数,里面包括读取一系列txt文件内容,然后将读入的内容转换格式,有好几个循环语句,之所以无法引发ProgressChanged事件跟这个消耗时间的函数有没有关系呢?