Skip to content

ProSnippets Tasks

UmaHarano edited this page Nov 12, 2025 · 23 revisions
Language:              C#  
Subject:               Tasks  
Contributor:           ArcGIS Pro SDK Team <[email protected]>  
Organization:          Esri, http://www.esri.com  
Date:                  11/7/2025  
ArcGIS Pro:            3.6  
Visual Studio:         2022  

Retrieve all the Task Items in a Project

IEnumerable<TaskProjectItem> taskItems = Project.Current.GetItems<TaskProjectItem>();
foreach (var item in taskItems)
{
  // do something
}

Open a Task File - .esriTasks file

// Open a task file
try
{
  // TODO - substitute your own .esriTasks file to be opened
  string taskFile = @"c:\Tasks\Get Started.esriTasks";
  //At 2.x -
  //System.Guid guid = await TaskAssistantModule.OpenTaskAsync(taskFile);
  System.Guid guid;
  if (TaskAssistantFactory.Instance.CanOpenTaskFile(taskFile))
    guid = await TaskAssistantFactory.Instance.OpenTaskFileAsync(taskFile);

  // TODO - retain the guid returned for use with CloseTaskItemAsync
}
catch (OpenTaskException e)
{
  // exception thrown if task file doesn't exist or has incorrect format
  ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(e.Message);
}

Open a Project Task Item

// get the first project task item
  var taskItem = Project.Current.GetItems<TaskProjectItem>().FirstOrDefault();
  // if there isn't a project task item, return
  if (taskItem == null)
    return;

  try
  {
    // Open it
    //At 2.x -
    //System.Guid guid = await TaskAssistantModule.OpenTaskItemAsync(taskItem.TaskItemGuid);
    var guid = await TaskAssistantFactory.Instance.OpenTaskItemAsync(taskItem.TaskItemGuid);

    // TODO - retain the guid returned for use with CloseTaskItemAsync
  }
  catch (OpenTaskException e)
  {
    ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(e.Message);
  }

Close a Task Item

// find the first project task item which is open
  var taskItem = Project.Current.GetItems<TaskProjectItem>().FirstOrDefault(t => t.IsOpen == true);
  // if there isn't a project task item, return
  if (taskItem == null)
    return;

  if (taskItem.IsOpen)
  {
    // close it
    // NOTE : The task item will also be removed from the project
    //At 2.x -
    //TaskAssistantModule.CloseTaskAsync(taskItem.TaskItemGuid);
    TaskAssistantFactory.Instance?.CloseTaskItemAsync(taskItem.TaskItemGuid);
  }

Export a Task Item

// get the first project task item
  var taskItem = Project.Current.GetItems<TaskProjectItem>().FirstOrDefault();
  // if there isn't a project task item, return
  if (taskItem == null)
    return;

  try
  {
    // export the task item to the c:\Temp folder
    string exportFolder = @"c:\temp";
    //At 2.x -
    //string fileName = await TaskAssistantModule.ExportTaskAsync(taskItem.TaskItemGuid, exportFolder);
    string fileName = await TaskAssistantFactory.Instance.ExportTaskItemAsync(taskItem.TaskItemGuid, exportFolder);
    ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Task saved to " + fileName);
  }
  catch (ExportTaskException e)
  {
    ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Error saving task " + e.Message);
  }

Get Task Information - from a TaskProjectItem

var taskItem = Project.Current.GetItems<TaskProjectItem>().FirstOrDefault();
  // if there isn't a project task item, return
  if (taskItem == null)
    return;

  string message = await QueuedTask.Run(async () =>
  {
    bool isOpen = taskItem.IsOpen;
    Guid taskGuid = taskItem.TaskItemGuid;

    string msg = "";
    try
    {
      TaskItemInfo taskItemInfo = await taskItem.GetTaskItemInfoAsync();

      msg = "Name : " + taskItemInfo.Name;
      msg += "\r\n" + "Description : " + taskItemInfo.Description;
      msg += "\r\n" + "Guid : " + taskItemInfo.Guid.ToString("B");
      msg += "\r\n" + "Task Count : " + taskItemInfo.GetTasks().Count();

      // iterate the tasks in the task item
      IEnumerable<TaskInfo> taskInfos = taskItemInfo.GetTasks();
      foreach (TaskInfo taskInfo in taskInfos)
      {
        string name = taskInfo.Name;
        Guid guid = taskInfo.Guid;

        // do something 
      }
    }
    catch (OpenTaskException e)
    {
      // exception thrown if task file doesn't exist or has incorrect format
      msg = e.Message;
    }
    catch (TaskFileVersionException e)
    {
      // exception thrown if task file does not support returning task information
      msg = e.Message;
    }
    return msg;
  });
  ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(message, "Task Information");

Get Task Information - from an .esriTasks file

// TODO - substitute your own .esriTasks file
  string taskFile = @"c:\Tasks\Get Started.esriTasks";

  string message = await QueuedTask.Run(async () =>
  {
    string msg = "";
    try
    {
      // retrieve the task item information
      //At 2.x -
      //TaskItemInfo taskItemInfo = await TaskAssistantModule.GetTaskItemInfoAsync(taskFile);
      TaskItemInfo taskItemInfo = await TaskAssistantFactory.Instance.GetTaskItemInfoAsync(taskFile);

      msg = "Name : " + taskItemInfo.Name;
      msg += "\r\n" + "Description : " + taskItemInfo.Description;
      msg += "\r\n" + "Guid : " + taskItemInfo.Guid.ToString("B");
      msg += "\r\n" + "Task Count : " + taskItemInfo.GetTasks().Count();

    }
    catch (OpenTaskException e)
    {
      // exception thrown if task file doesn't exist or has incorrect format
      msg = e.Message;
    }
    catch (TaskFileVersionException e)
    {
      // exception thrown if task file does not support returning task information
      msg = e.Message;
    }
    return msg;
  });
  ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(message, "Task Information");

Open a specific Task in a Task File - .esriTasks file

// TODO - substitute your own .esriTasks file to be opened
  string taskFile = @"c:\Tasks\Get Started.esriTasks";

  await QueuedTask.Run(async () =>
  {
    try
    {
      // retrieve the task item information
      //At 2.x -
      //TaskItemInfo taskItemInfo = await TaskAssistantModule.GetTaskItemInfoAsync(taskFile);
      var taskItemInfo = await TaskAssistantFactory.Instance.GetTaskItemInfoAsync(taskFile);

      // find the first task
      TaskInfo taskInfo = taskItemInfo.GetTasks().FirstOrDefault();

      Guid guid = Guid.Empty;
      if (taskInfo != null)
      {
        // if a task exists, open it
        //At 2.x -
        //guid = await TaskAssistantModule.OpenTaskAsync(taskFile, taskInfo.Guid);
        guid = await TaskAssistantFactory.Instance.OpenTaskFileAsync(taskFile, taskInfo.Guid);
      }
      else
      {
        // else just open the task item
        //At 2.x -
        //guid = await TaskAssistantModule.OpenTaskAsync(taskFile);
        guid = await TaskAssistantFactory.Instance.OpenTaskFileAsync(taskFile);
      }

      // TODO - retain the guid returned for use with CloseTaskItemAsync 
    }
    catch (OpenTaskException e)
    {
      // exception thrown if task file doesn't exist or has incorrect format
      ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(e.Message);
    }
    catch (TaskFileVersionException e)
    {
      // exception thrown if task file does not support returning task information
      ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(e.Message);
    }

  });

Subscribe to Task Events

TaskStartedEvent.Subscribe(taskStartedEventArgs =>
    {
        string userName = taskStartedEventArgs.UserID;    // ArcGIS Online signed in userName.  If not signed in to ArcGIS Online then returns the name of the user logged in to the Windows OS.
        string projectName = taskStartedEventArgs.ProjectName;

        Guid taskItemGuid = taskStartedEventArgs.TaskItemGuid;
        string taskItemName = taskStartedEventArgs.TaskItemName;
        string taskItemVersion = taskStartedEventArgs.TaskItemVersion;

        Guid taskGuid = taskStartedEventArgs.TaskGuid;
        string taskName = taskStartedEventArgs.TaskName;

        DateTime startTime = taskStartedEventArgs.StartTime;
    });
    TaskEndedEvent.Subscribe(taskEndedEventArgs =>
                {
                    string userName = taskEndedEventArgs.UserID;    // ArcGIS Online signed in userName.  If not signed in to ArcGIS Online then returns the name of the user logged in to the Windows OS.
                    string projectName = taskEndedEventArgs.ProjectName;

                    Guid taskItemGuid = taskEndedEventArgs.TaskItemGuid;
                    string taskItemName = taskEndedEventArgs.TaskItemName;
                    string taskItemVersion = taskEndedEventArgs.TaskItemVersion;

                    Guid taskGuid = taskEndedEventArgs.TaskGuid;
                    string taskName = taskEndedEventArgs.TaskName;

                    DateTime startTime = taskEndedEventArgs.StartTime;
                    DateTime endTime = taskEndedEventArgs.EndTime;
                    double duration = taskEndedEventArgs.Duration;

                    bool completed = taskEndedEventArgs.Completed;    // completed or cancelled
                });
Clone this wiki locally