Skip to main content
All docs
V24.2

DevExpress v24.2 Update — Your Feedback Matters

Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

How to: Implement Progress Notifications for Workbook Operations

  • 3 minutes to read

The Spreadsheet Document API allows you to implement progress notifications for the following asynchronous methods:

These methods accept an IProgress<T> parameter to report progress information for each operation. The <T> type is an integer that defines the progress percentage. Use the Progress<T> class as the default implementation of the IProgress<T> interface.

Read Tutorial: Task-Based Asynchronous Pattern: Progress Reporting

#Example: Create a Progress Dialog

The example below demonstrates how to create a simple progress dialog that indicates the progress of load and PDF export operations.

A Progress Dialog for Workbook Operations

A CancellationToken object is passed to the LoadDocumentAsync and ExportToPdfAsync methods to cancel operations when a user clicks Cancel or closes the form.

View Example: Indicate Progress of Workbook Operations

using System;
using System.Threading;
using System.Windows.Forms;
using DevExpress.Spreadsheet;
// ...

public partial class Form1 : DevExpress.XtraEditors.XtraForm
{
    CancellationTokenSource cancellationSource;

    public Form1() {
        InitializeComponent();
    }

    private async void RunCancel_Click(object sender, EventArgs e) {
        if (cancellationSource != null) {
            cancellationSource.Cancel();
        }
        else {
            progressBarLoad.Value = 0;
            progressBarExport.Value = 0;
            btnRunCancel.Text = "Cancel";
            cancellationSource = new CancellationTokenSource();
            try {
                using (Workbook workbook = new Workbook()) {
                    await workbook.LoadDocumentAsync("Document.xlsx",
                        cancellationSource.Token,
                        new Progress<int>((progress) => {
                            progressBarLoad.Value = progress;
                            progressBarLoad.Refresh();
                        }));
                    await workbook.ExportToPdfAsync("Result.pdf",
                        cancellationSource.Token,
                        new Progress<int>((progress) => {
                            progressBarExport.Value = progress;
                            progressBarExport.Refresh();
                        }));
                }
            }
            catch (OperationCanceledException) {
                progressBarLoad.Value = 0;
                progressBarExport.Value = 0;
            }
            finally {
                cancellationSource.Dispose();
                cancellationSource = null;
                btnRunCancel.Text = "Run";
            }
        }
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
        cancellationSource?.Cancel();
    }
}