我们可以在DoWork事件中调用方法吗?

时间:2016-10-14 10:43:23

标签: c# backgroundworker

我正在使用后台工作程序将数据表导出到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();
}

1 个答案:

答案 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);
}

我不确定你是如何生成报告的。此外,我假设您的pbStatusMinimum="0"Maximum="100"。您可以在导出每一行后报告进展情况。

worker.ReportProgress(currentRow * 100.0 / totalRows);

如果您不确定如何通过将progress.IsIndeterminate设置为true来确定如何计算,则还可以设置进度条中间位置

pbStatus.IsIndeterminate = true;