日期:2014-05-19  浏览次数:20742 次

关于控件backgroundWorker后台操作的问题
使用.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这个函数,也就是说辅助线程是否报告进度无法实现,不明白哪里出错了。


------解决方案--------------------
this.changeFormat((data)e.Argument , worker, e)是做什么的?
------解决方案--------------------
ProgressChanged是个事件
------解决方案--------------------
ReportProgress这个方法调了么?
------解决方案--------------------
事件是发生的,而不是调用的,事件发生时会自动调用相应事件处理代码
可以用ReportProgress方法,引发 ProgressChanged事件