В этой статье вы узнаете, как создать синхронную Управляемую Операцию с подпроцессами. Прежде чем продолжить, рекомендуется ознакомиться со следующими материалами:

В качестве исполняемого кода для подпроцессов будет использован метод ExecuteCore класса SimpleOperation. Отличие от предыдущего примера содержится в реализации метода StartSimpleOperation_Execute:

 

      private void StartSimpleOperation_Execute(object sender, SimpleActionExecuteEventArgs e)

       {

          var managedOperation = new ManagedOperation(this.Application)

           {

               ZoneType = ManagedOperationZoneTypes.Local,

               Name = "Managed operation with progress bar",

           };

 

           managedOperation.CreateSubProcess("SubProcess 1", item => new SimpleOperation(this.Application).ExecuteCore(item));

           managedOperation.CreateSubProcess("SubProcess 2", item => new SimpleOperation(this.Application).ExecuteCore(item));

           managedOperation.CreateSubProcess("SubProcess 3", item => new SimpleOperation(this.Application).ExecuteCore(item));

           managedOperation.CreateSubProcess("SubProcess 4", item => new SimpleOperation(this.Application).ExecuteCore(item));

           managedOperation.CreateSubProcess("SubProcess 5", item => new SimpleOperation(this.Application).ExecuteCore(item));

 

           managedOperation.Start();

 

          SyncManagedOperationHelper.CreateHelper(managedOperation).InitShowViewParametersSubprocess(e.ShowViewParameters, true);

       }

Как видно из вышеприведенного кода, после создания основной Управляемой Операции managedOperation, в нее добавлено 5 подпроцессов методом CreateSubProcess(). View для отображения операции с подпроцессами инициализируется методом InitShowViewParametersSubprocess(). При запуске такой операции выполнение подпроцессов  отображается в отдельном List View. Имеется возможность перейти к Detail View любого подпроцесса.

Win:

Вы можете найти код, используемый в этой статье, в файлах Operation1.cs и SyncManagedOperationsWindowController.cs (SyncSub_Execute method) демо-приложения Xafari Northwind, установленного вместе с Xafari.

Замечание:

По умолчанию, каждый создаваемый подпроцесс получает очередной порядковый номер. Однако метод CreateSubProcess() предусматривает возможность создавать подпроцессы с указанными номерами. Для этих целей следует испоьзовать перегруженный вариант:

 

managedOperation.CreateSubProcess("Subprocess with index 789", item => new SimpleOperation(this.Application).ExecuteCore(item), managedOperation.Count, 789);

 

Еще одна перегрузка позволяет создавать подпроцесс. индекс которого равен количеству подпроцессов:

 

managedOperation.CreateSubProcess("Subprocess, the index is equal to the number of subprocesses", item => new SimpleOperation(this.Application).ExecuteCore(item), managedOperation.Count);