Поделиться через


Определение и использование делегатов действий в конструкторе рабочих процессов

платформа .NET Framework 4.5 включает встроенный конструктор для InvokeDelegate действия. Данный конструктор можно использовать в целях назначения делегатов для действия, производного от ActivityDelegate, такого как ActivityAction или ActivityFunc<TResult>.

Укажите делегат действия

  1. Создайте проект консольного приложения рабочего процесса.

    Примечание.

    Если вы не видите шаблоны проектов рабочего процесса , сначала установите компонент Windows Workflow Foundation Visual Studio. Подробные инструкции см. в разделе "Установка Windows Workflow Foundation".

  2. Щелкните проект правой кнопкой мыши в Обозреватель решений и выберите "Добавить>новый элемент". Выберите категорию рабочего процесса и выберите шаблон элемента действия. Назовите новое действие MyForEach.xaml и нажмите кнопку "ОК".

    Действие открывается в конструкторе рабочих процессов.

  3. В конструкторе рабочих процессов перейдите на вкладку "Аргументы ".

  4. Нажмите кнопку "Создать аргумент". Назовите новый аргумент Items.

  5. В столбце типа аргумента выберите массив [T].

  6. В браузере типов выберите "Объект " и нажмите кнопку "ОК".

  7. Снова нажмите кнопку "Создать аргумент ". Назовите новый текст аргумента. В столбце "Направление " для нового аргумента выберите свойство.

  8. В столбце "Тип аргумента" выберите "Обзор типов"

  9. В браузере типов введите ActivityAction в поле "Имя типа". Выберите ActivityAction<T> в представлении дерева. Выберите объект в раскрывающемся списке, который отображается для назначения аргументу объекта ActivityAction.><

  10. Перетащите While действие из раздела потока управления панели элементов в область конструктора.

  11. Выберите действие и перейдите While на вкладку "Переменные ".

  12. Выберите "Создать переменную". Назовите новый индекс переменной.

  13. В столбце типа переменной выберите Int32. Оставьте область как "В то время" и столбец по умолчанию пустым.

  14. Задайте свойство Condition действия While для индексирования < Items.Length;.

  15. Перетащите InvokeDelegate действие из раздела "Примитивы" панели элементов в текст While действия.

  16. Выберите текст в раскрывающемся списке делегата.

  17. В сетке свойств действия нажмите кнопку ... в свойстве "Аргументы делегата".InvokeDelegate

  18. В столбце "Значение" аргумента с именем Argument введите Items[Index]. Нажмите кнопку "ОК ", чтобы закрыть диалоговое окно "ДелегатArguments ".

  19. Перетащите действие Assign на горизонтальную линию под действием InvokeDelegate. Действие Assign создается, и Sequence действие создается автоматически, чтобы содержать два действия в разделе "Текст" действия MyForEach. Последовательность необходима, так как раздел body может содержать только одно действие. Автоматическое создание нового Sequence действия — это новая функция платформа .NET Framework 4.5.

  20. Задайте свойству To действия индексировать.Assign Задайте свойство Value действия "Назначение" на индекс+1.

    Настраиваемое действие MyForEach вызывает произвольное действие один раз для каждого значения, переданного в него через коллекцию Items , со значениями в коллекции в качестве входных данных для действия.

Использование настраиваемого действия в рабочем процессе

  1. Создайте проект, нажав клавиши CTRL+SHIFT+B.

  2. В Обозреватель решений откройте Workflow1.xaml в конструкторе.

  3. Перетащите действие MyForEach из панели элементов в область конструктора. Действие находится в разделе панели элементов с тем же именем, что и проект.

  4. Задайте свойству Items действия MyForEach значение new Object[] {1, abc}.

  5. Перетащите WriteLine действие из раздела "Примитивы" панели элементов в раздел "Делегат:Текст" действия MyForEach.

  6. Задайте свойству Text действия WriteLine значение Argument.ToString().

При выполнении рабочего процесса консоль отображает следующие выходные данные:

1abc