在BackGroundWorker中运行方法并显示ProgressBar

我想要的是当一些方法正在做一些任务时UI保持活跃,我想在进度条中显示工作的进度。

我有一个方法,一个BackGroundWorker和一个Progressbar 。 我想在BackGroundWorker开始运行时调用该方法并显示进度。 该方法包含一个循环。 因此,它可以报告进度。

那么,可以做些什么呢?

 private void Form1_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'dataSet1.TBLMARKET' table. You can move, or remove it, as needed. myBGWorker.WorkerReportsProgress = true; } private void myBGWorker_DoWork(object sender, DoWorkEventArgs e) { parseFiles(); } private void myBGWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { myProgressBar.Value = e.ProgressPercentage; } private void myBGWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { MessageBox.Show("Done"); } private void parseButton_Click(object sender, EventArgs e) { myBGWorker.RunWorkerAsync(); } public void parseFiles() { for() { //parsing myBGWorker.ReportProgress(...); } } 

但它不起作用。 Progressbar未更新。 MessageBox “完成”后只显示一小段进度。

而不是使用一个ParseFiles方法(应该依赖于myBGWorker)使用解析一个文件的循环和方法。 报告该循环中的进度百分比:

 private void parseButton_Click(object sender, EventArgs e) { parseButton.Enabled = false; myBGWorker.RunWorkerAsync(); } private void myBGWorker_DoWork(object sender, DoWorkEventArgs e) { for(int i = 0; i < filesCount; i++) { ParseSingleFile(); // pass filename here int percentage = (i + 1) * 100 / filesCount; myBGWorker.ReportProgress(percentage); } } void myBGWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { myProgressBar.Value = e.ProgressPercentage; } void myBGWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { parseButton.Enabled = true; MessageBox.Show("Done"); } 

至。 soham.m17使用sender参数

 private void myBGWorker_DoWork(object sender, DoWorkEventArgs e) { var worker = sender as BackgroundWorker; for(int i = 0; i < filesCount; i++) { ParseSingleFile(); // pass filename here int percentage = (i + 1) * 100 / filesCount; worker.ReportProgress(percentage); // use not myBGWorker but worker from sender } } 

我很抱歉这个问题。 实际上代码工作正常。 它没有显示Progressbar作为myBGWorker.ReportProgress()的参数是分数而不是百分比。 所以,它没有显示出来。 抱歉给你带来不便。

主持人可能会删除此主题。 否则它可能是其他人的教程。