ArcObjects Library Reference

Show Progress Dialog Snippet

Launch a Progress Dialog to display how long it is taking to complete some event.

[C#]
/// <summary>
/// Launch a Progress Dialog to display how long it is taking to complete some event.
/// </summary>
/// <param name="application">An IApplication interface.</param>
/// <param name="int32_Minimum">A System.Int32 that is the starting point for the progress display. Example: 0</param>
/// <param name="int32_Maximum">A System.Int32 that is the ending point for a progress display. Example: 10000</param>
/// <param name="string_Message">A System.String that is the message you want to user to see. Example: "Parsing Data, Please Wait.</param>
/// <remarks>
/// Calling this sub/method by itself is only half of the programming effort. Inside of the For loop you do something
/// that requires time to progress.
/// </remarks>
public void ShowProgressDialog(ESRI.ArcGIS.Framework.IApplication application, System.Int32 int32_Minimum, System.Int32 int32_Maximum, System.String string_Message)
{

    // Create a CancelTracker
    ESRI.ArcGIS.esriSystem.ITrackCancel trackCancel = new ESRI.ArcGIS.Display.CancelTrackerClass();

    ESRI.ArcGIS.Framework.IProgressDialogFactory progressDialogFactory = new ESRI.ArcGIS.Framework.ProgressDialogFactoryClass();

    // Set the properties of the Step Progressor
    System.Int32 int32_hWnd = application.hWnd;
    ESRI.ArcGIS.esriSystem.IStepProgressor stepProgressor = progressDialogFactory.Create(trackCancel, int32_hWnd);
    stepProgressor.MinRange = int32_Minimum;
    stepProgressor.MaxRange = int32_Maximum;
    stepProgressor.StepValue = 1;
    stepProgressor.Message = string_Message;

    // Create the ProgressDialog. This automatically displays the dialog
    ESRI.ArcGIS.Framework.IProgressDialog2 progressDialog2 = (ESRI.ArcGIS.Framework.IProgressDialog2)stepProgressor; // Explict Cast

    // Set the properties of the ProgressDialog
    progressDialog2.CancelEnabled = true;
    progressDialog2.Description = "Counting to " + int32_Maximum.ToString() + ".";
    progressDialog2.Title = "Counting...";
    progressDialog2.Animation = ESRI.ArcGIS.Framework.esriProgressAnimationTypes.esriDownloadFile;

    // Step. Do your big process here.
    System.Boolean boolean_Continue = false;
    boolean_Continue = true;
    System.Int32 i = 0;
    for (i = int32_Minimum; i <= int32_Maximum; i++)
    {
        ESRI.ArcGIS.esriSystem.IStatusBar statusBar = application.StatusBar;
        statusBar.set_Message(0, i.ToString());

        //TODO:
        //Ideally you would call another sub/function/method from here to do the
        //work. For example read all files of a specified types on disk, loop
        //through a recordset, etc.
        //...


        //Check if the cancel button was pressed. If so, stop process
        boolean_Continue = trackCancel.Continue();
        if (!boolean_Continue)
        {
            break;
        }

    }

    // Done
    trackCancel = null;
    stepProgressor = null;
    progressDialog2.HideDialog();
    progressDialog2 = null;

}

[Visual Basic .NET]
''' <summary>
''' Launch a Progress Dialog to display how long it is taking to complete some event.
''' </summary>
''' <param name="application">An IApplication interface.</param>
''' <param name="int32_Minimum">A System.Int32 that is the starting point for the progress display. Example: 0</param>
''' <param name="int32_Maximum">A System.Int32 that is the ending point for a progress display. Example: 10000</param>
''' <param name="string_Message">A System.String that is the message you want to user to see. Example: "Parsing Data, Please Wait.</param>
''' <remarks>
''' Calling this sub/method by itself is only half of the programming effort. Inside of the For loop you do something
''' that requires time to progress.
''' </remarks>
Public Sub ShowProgressDialog(ByVal application As ESRI.ArcGIS.Framework.IApplication, ByVal int32_Minimum As System.Int32, ByVal int32_Maximum As System.Int32, ByVal string_Message As System.String)

  ' Create a CancelTracker
  Dim trackCancel As ESRI.ArcGIS.esriSystem.ITrackCancel = New ESRI.ArcGIS.Display.CancelTrackerClass

  Dim progressDialogFactory As ESRI.ArcGIS.Framework.IProgressDialogFactory = New ESRI.ArcGIS.Framework.ProgressDialogFactoryClass

  ' Set the properties of the Step Progressor
  Dim int32_hWnd As System.Int32 = application.hWnd
  Dim stepProgressor As ESRI.ArcGIS.esriSystem.IStepProgressor = progressDialogFactory.Create(trackCancel, int32_hWnd)
  stepProgressor.MinRange = int32_Minimum
  stepProgressor.MaxRange = int32_Maximum
  stepProgressor.StepValue = 1
  stepProgressor.Message = string_Message

  ' Create the ProgressDialog. This automatically displays the dialog
  Dim progressDialog2 As ESRI.ArcGIS.Framework.IProgressDialog2 = CType(stepProgressor, ESRI.ArcGIS.Framework.IProgressDialog2) ' Explict Cast

  ' Set the properties of the ProgressDialog
  progressDialog2.CancelEnabled = True
  progressDialog2.Description = "Counting to " + int32_Maximum.ToString + "."
  progressDialog2.Title = "Counting..."
  progressDialog2.Animation = ESRI.ArcGIS.Framework.esriProgressAnimationTypes.esriDownloadFile

  ' Step. Do your big process here.
  Dim boolean_Continue As System.Boolean
  boolean_Continue = True
  Dim i As System.Int32
  For i = int32_Minimum To int32_Maximum

      Dim statusBar As ESRI.ArcGIS.esriSystem.IStatusBar = application.StatusBar
      statusBar.Message(0) = i.ToString

    'TODO:
    'Ideally you would call another sub/function/method from here to do the
    'work. For example read all files of a specified types on disk, loop
    'through a recordset, etc.
    '...


    'Check if the cancel button was pressed. If so, stop process
    boolean_Continue = trackCancel.Continue
    If Not boolean_Continue Then
      Exit For
    End If

  Next i

  ' Done
  trackCancel = Nothing
  stepProgressor = Nothing
  progressDialog2.HideDialog()
  progressDialog2 = Nothing

End Sub


Additional Requirements
  • The code in this document requires the following References added to the Visual Studio project:
  • ESRI.ArcGIS.Display
  • ESRI.ArcGIS.Framework
  • ESRI.ArcGIS.System
  • System