# Progress

> The Progress utility class reports the progress of asynchronous tasks to Unity.

## Definition

* **Type:** Class
* **Namespace:** [UnityEditor](/engine/6000.0/script-reference/unityeditor.md)
* **Assembly:** UnityEditor

```csharp
public static class Progress
```

## Remarks

The Progress utility class can be used to report progress of asynchronous tasks in multiple ways. Here is an example of a task that runs on the [EditorApplication.update](/engine/6000.0/script-reference/unityeditor/editorapplication/update.md) loop and reports progress:

```csharp
using System.Collections;
using UnityEditor;

class ProgressReport_EditorUpdate
{
    static IEnumerator s_CurrentEnumerator;

    [MenuItem("Examples/ProgressReport/EditorUpdate")]
    static void RunEditorUpdate()
    {
        if (s_CurrentEnumerator == null)
        {
            s_CurrentEnumerator = RunTaskWithReport();
        }
        EditorApplication.update -= RunTaskOnUpdate;
        EditorApplication.update += RunTaskOnUpdate;
    }

    static void RunTaskOnUpdate()
    {
        if (s_CurrentEnumerator == null)
        {
            return;
        }

        // Execute one step of the task
        var atEnd = !s_CurrentEnumerator.MoveNext();

        // If there is nothing more to do, remove the update callback
        if (atEnd)
        {
            s_CurrentEnumerator = null;
            EditorApplication.update -= RunTaskOnUpdate;
        }
    }

    static IEnumerator RunTaskWithReport()
    {
        // Create a new progress indicator
        int progressId = Progress.Start("Running one task");

        // Report the progress status at anytime
        for (int frame = 0; frame <= 1000; ++frame)
        {
            string description;
            if (frame < 250)
                description = "First part of the task";
            else if (frame < 750)
                description = "Second part of the task";
            else
                description = "Last part of the task";
            Progress.Report(progressId, frame / 1000.0f, description);

            // Do your computation that you want to report progress on
            // ...
            yield return null;
        }

        // The task is finished. Remove the associated progress indicator.
        Progress.Remove(progressId);
    }
}
```

Here is another example of a task that runs on a separate thread and reports progress:

```csharp
using System.Threading;
using System.Threading.Tasks;
using UnityEditor;

class ProgressReport_Threaded
{
    [MenuItem("Examples/ProgressReport/Threaded")]
    static void RunThreaded()
    {
        Task.Run(RunTaskWithReport);
    }

    static void RunTaskWithReport()
    {
        // Create a new progress indicator
        int progressId = Progress.Start("Running one task");

        // Report the progress status at anytime
        for (int frame = 0; frame <= 1000; ++frame)
        {
            string description;
            if (frame < 250)
                description = "First part of the task";
            else if (frame < 750)
                description = "Second part of the task";
            else
                description = "Last part of the task";
            Progress.Report(progressId, frame / 1000.0f, description);

            // Do your computation that you want to report progress on
            ComputeSlowStep();
        }

        // The task is finished. Remove the associated progress indicator.
        Progress.Remove(progressId);
    }

    static void ComputeSlowStep()
    {
        // Simulate a slow computation with a 1 millisecond sleep
        Thread.Sleep(1);
    }
}
```

## Static Properties

| Property                                                                                           | Description                                                                        |
| -------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| [globalProgress](/engine/6000.0/script-reference/unityeditor/progress/globalprogress.md)           | Returns the global average progression of all running tasks.                       |
| [globalRemainingTime](/engine/6000.0/script-reference/unityeditor/progress/globalremainingtime.md) | Returns the maximum time remaining for all running progress indicators.            |
| [running](/engine/6000.0/script-reference/unityeditor/progress/running.md)                         | Returns true if there is at least one running progress indicator, false otherwise. |

## Static Methods

| Method                                                                                                       | Description                                                                                                          |
| ------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------- |
| [Cancel](/engine/6000.0/script-reference/unityeditor/progress/cancel.md)                                     | Cancels a runnning progress indicator, and invokes the cancel callback for the associated task.                      |
| [ClearRemainingTime](/engine/6000.0/script-reference/unityeditor/progress/clearremainingtime.md)             | Resets the computation of a progress indicator's remaining time.                                                     |
| [EnumerateItems](/engine/6000.0/script-reference/unityeditor/progress/enumerateitems.md)                     | Returns an enumerator to loop over all progress indicators.                                                          |
| [Exists](/engine/6000.0/script-reference/unityeditor/progress/exists.md)                                     | Checks whether a progress indicator with the specified ID exists.                                                    |
| [Finish](/engine/6000.0/script-reference/unityeditor/progress/finish.md)                                     | Marks the progress indicator as finished.                                                                            |
| [GetCount](/engine/6000.0/script-reference/unityeditor/progress/getcount.md)                                 | Gets the number of available progress indicators.                                                                    |
| [GetCountPerStatus](/engine/6000.0/script-reference/unityeditor/progress/getcountperstatus.md)               | For each available status, gets the number of progress indicators with that status.                                  |
| [GetCurrentStep](/engine/6000.0/script-reference/unityeditor/progress/getcurrentstep.md)                     | Gets the current step for a progress indicator.                                                                      |
| [GetDescription](/engine/6000.0/script-reference/unityeditor/progress/getdescription.md)                     | Gets a progress indicator's description.                                                                             |
| [GetEndDateTime](/engine/6000.0/script-reference/unityeditor/progress/getenddatetime.md)                     | Gets the timestamp of when the progress indicator ended.                                                             |
| [GetId](/engine/6000.0/script-reference/unityeditor/progress/getid.md)                                       | Finds a progress indicator's unique ID using its index in the set of all available progress indicators.              |
| [GetName](/engine/6000.0/script-reference/unityeditor/progress/getname.md)                                   | Gets a progress indicator's name.                                                                                    |
| [GetOptions](/engine/6000.0/script-reference/unityeditor/progress/getoptions.md)                             | Gets the options that you specified when you started the progress indicator.                                         |
| [GetParentId](/engine/6000.0/script-reference/unityeditor/progress/getparentid.md)                           | Gets the unique ID of the progress indicator's parent, if any.                                                       |
| [GetPriority](/engine/6000.0/script-reference/unityeditor/progress/getpriority.md)                           | Gets a progress indicator's priority.                                                                                |
| [GetProgress](/engine/6000.0/script-reference/unityeditor/progress/getprogress.md)                           | Gets a progress indicator's progress.                                                                                |
| [GetProgressById](/engine/6000.0/script-reference/unityeditor/progress/getprogressbyid.md)                   | Gets information about a progress indicator.                                                                         |
| [GetRemainingTime](/engine/6000.0/script-reference/unityeditor/progress/getremainingtime.md)                 | Gets a progress indicator's remaining time, in seconds.                                                              |
| [GetRunningProgressCount](/engine/6000.0/script-reference/unityeditor/progress/getrunningprogresscount.md)   | Gets the number of active or running progress indicators.                                                            |
| [GetStartDateTime](/engine/6000.0/script-reference/unityeditor/progress/getstartdatetime.md)                 | Gets the timestamp of when the progress indicator started.                                                           |
| [GetStatus](/engine/6000.0/script-reference/unityeditor/progress/getstatus.md)                               | Gets the progress indicator's status.                                                                                |
| [GetStepLabel](/engine/6000.0/script-reference/unityeditor/progress/getsteplabel.md)                         | Gets the label that displays a progress indicator's steps.                                                           |
| [GetTimeDisplayMode](/engine/6000.0/script-reference/unityeditor/progress/gettimedisplaymode.md)             | Get a progress indicator's time display mode.                                                                        |
| [GetTotalSteps](/engine/6000.0/script-reference/unityeditor/progress/gettotalsteps.md)                       | Gets the total number of steps, from start to finish, for a progress indicator.                                      |
| [GetUpdateDateTime](/engine/6000.0/script-reference/unityeditor/progress/getupdatedatetime.md)               | Gets the time that the progress indicator last changed, or finished.                                                 |
| [IsCancellable](/engine/6000.0/script-reference/unityeditor/progress/iscancellable.md)                       | Indicates whether you can cancel the progress indicator's associated task.                                           |
| [IsPausable](/engine/6000.0/script-reference/unityeditor/progress/ispausable.md)                             | Indicates whether you can pause the progress indicator's task.                                                       |
| [Pause](/engine/6000.0/script-reference/unityeditor/progress/pause.md)                                       | Pauses a runnning progress indicator, and invokes the pause callback for its task.                                   |
| [RegisterCancelCallback](/engine/6000.0/script-reference/unityeditor/progress/registercancelcallback.md)     | Registers a callback that is called when the user requests to cancel a running progress indicator's associated task. |
| [RegisterPauseCallback](/engine/6000.0/script-reference/unityeditor/progress/registerpausecallback.md)       | Registers a callback that is called when the user requests to pause or resume a running progress indicator's task.   |
| [Remove](/engine/6000.0/script-reference/unityeditor/progress/remove.md)                                     | Finishes and removes an active progress indicator.                                                                   |
| [Report](/engine/6000.0/script-reference/unityeditor/progress/report.md)                                     | Reports a running progress indicator's current status.                                                               |
| [Resume](/engine/6000.0/script-reference/unityeditor/progress/resume.md)                                     | Resumes a paused progress indicator, and invokes the pause callback for the associated task.                         |
| [SetDescription](/engine/6000.0/script-reference/unityeditor/progress/setdescription.md)                     | Sets the progress indicator's description. To clear the description pass null.                                       |
| [SetPriority](/engine/6000.0/script-reference/unityeditor/progress/setpriority.md)                           | Sets a progress indicator's priority.                                                                                |
| [SetRemainingTime](/engine/6000.0/script-reference/unityeditor/progress/setremainingtime.md)                 | Sets the progress indicator's remaining time, in seconds.                                                            |
| [SetStepLabel](/engine/6000.0/script-reference/unityeditor/progress/setsteplabel.md)                         | Sets the label that displays a progress indicator's steps.                                                           |
| [SetTimeDisplayMode](/engine/6000.0/script-reference/unityeditor/progress/settimedisplaymode.md)             | Set a progress indicator's time display mode.                                                                        |
| [ShowDetails](/engine/6000.0/script-reference/unityeditor/progress/showdetails.md)                           | Opens the progress window for background tasks.                                                                      |
| [Start](/engine/6000.0/script-reference/unityeditor/progress/start.md)                                       | This method starts a new progress indicator.                                                                         |
| [UnregisterCancelCallback](/engine/6000.0/script-reference/unityeditor/progress/unregistercancelcallback.md) | Unregisters a previously registered progress cancellation callback.                                                  |
| [UnregisterPauseCallback](/engine/6000.0/script-reference/unityeditor/progress/unregisterpausecallback.md)   | Unregisters a previously registered progress pause callback.                                                         |

## Static Events

| Member                                                                     | Description                                                |
| -------------------------------------------------------------------------- | ---------------------------------------------------------- |
| [added](/engine/6000.0/script-reference/unityeditor/progress/added.md)     | An event raised when a new progress indicator starts.      |
| [removed](/engine/6000.0/script-reference/unityeditor/progress/removed.md) | An event raised when a progress indicator is removed.      |
| [updated](/engine/6000.0/script-reference/unityeditor/progress/updated.md) | An event raised when a progress indicator's state updates. |

## Classes

| Class                                                                         | Description                                                            |
| ----------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| [Progress.Item](/engine/6000.0/script-reference/unityeditor/progress/item.md) | A data structure that provides information about a progress indicator. |

## Enums

| Enum                                                                                                | Description                                                              |
| --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| [Progress.Options](/engine/6000.0/script-reference/unityeditor/progress/options.md)                 | Options that define how a progress indicator behaves.                    |
| [Progress.Priority](/engine/6000.0/script-reference/unityeditor/progress/priority.md)               | An enumeration that defines task priorities.                             |
| [Progress.Status](/engine/6000.0/script-reference/unityeditor/progress/status.md)                   | Indicates the status of a progress indicator's associated task.          |
| [Progress.TimeDisplayMode](/engine/6000.0/script-reference/unityeditor/progress/timedisplaymode.md) | Specifies what kind of time information the progress indicator displays. |
