我正在使用后台工作程序将数据表导出到excel文件。我想使用进度条显示导出进度。我们是否必须在Do Work事件中编写导出代码,或者我们是否可以调用其他类中存在的方法。 在我的代码中,我试着调用不同的方法。但它不起作用。 下面是示例代码。
public MainWindow()
{
InitializeComponent();
property = new Property();
this.DataContext = property;
worker.WorkerReportsProgress = true;
worker.DoWork += worker_DoWork;
worker.ProgressChanged += worker_ProgressChanged;
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
System.Windows.Forms.MessageBox.Show(e.Error.Message);
}
else
{
System.Windows.Forms.MessageBox.Show("Exported Successfully");
}
}
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
pbStatus.Value = e.ProgressPercentage;
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
Export export = new Export();
export.GenerateExcelFile();
}
答案 0 :(得分:1)
您需要使用有效进度值
从worker_DoWork
致电worker.ReportProgress
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
worker.ReportProgress(0);
// Some job
worker.ReportProgress(10);
// ...
// Finish
worker.ReportProgress(100);
}
我不确定你是如何生成报告的。此外,我假设您的pbStatus
有Minimum="0"
和Maximum="100"
。您可以在导出每一行后报告进展情况。
worker.ReportProgress(currentRow * 100.0 / totalRows);
如果您不确定如何通过将progress.IsIndeterminate
设置为true
来确定如何计算,则还可以设置进度条中间位置
pbStatus.IsIndeterminate = true;