Определение и использование делегатов действий в конструкторе рабочих процессов
платформа .NET Framework 4.5 включает встроенный конструктор для InvokeDelegate действия. Данный конструктор можно использовать в целях назначения делегатов для действия, производного от ActivityDelegate, такого как ActivityAction или ActivityFunc<TResult>.
Укажите делегат действия
Создайте проект консольного приложения рабочего процесса.
Примечание.
Если вы не видите шаблоны проектов рабочего процесса , сначала установите компонент Windows Workflow Foundation Visual Studio. Подробные инструкции см. в разделе "Установка Windows Workflow Foundation".
Щелкните проект правой кнопкой мыши в Обозреватель решений и выберите "Добавить>новый элемент". Выберите категорию рабочего процесса и выберите шаблон элемента действия. Назовите новое действие MyForEach.xaml и нажмите кнопку "ОК".
Действие открывается в конструкторе рабочих процессов.
В конструкторе рабочих процессов перейдите на вкладку "Аргументы ".
Нажмите кнопку "Создать аргумент". Назовите новый аргумент Items.
В столбце типа аргумента выберите массив [T].
В браузере типов выберите "Объект " и нажмите кнопку "ОК".
Снова нажмите кнопку "Создать аргумент ". Назовите новый текст аргумента. В столбце "Направление " для нового аргумента выберите свойство.
В столбце "Тип аргумента" выберите "Обзор типов"
В браузере типов введите ActivityAction в поле "Имя типа". Выберите ActivityAction<T> в представлении дерева. Выберите объект в раскрывающемся списке, который отображается для назначения аргументу объекта ActivityAction.><
Перетащите While действие из раздела потока управления панели элементов в область конструктора.
Выберите действие и перейдите While на вкладку "Переменные ".
Выберите "Создать переменную". Назовите новый индекс переменной.
В столбце типа переменной выберите Int32. Оставьте область как "В то время" и столбец по умолчанию пустым.
Задайте свойство Condition действия While для индексирования < Items.Length;.
Перетащите InvokeDelegate действие из раздела "Примитивы" панели элементов в текст While действия.
Выберите текст в раскрывающемся списке делегата.
В сетке свойств действия нажмите кнопку ... в свойстве "Аргументы делегата".InvokeDelegate
В столбце "Значение" аргумента с именем Argument введите Items[Index]. Нажмите кнопку "ОК ", чтобы закрыть диалоговое окно "ДелегатArguments ".
Перетащите действие Assign на горизонтальную линию под действием InvokeDelegate. Действие Assign создается, и Sequence действие создается автоматически, чтобы содержать два действия в разделе "Текст" действия MyForEach. Последовательность необходима, так как раздел body может содержать только одно действие. Автоматическое создание нового Sequence действия — это новая функция платформа .NET Framework 4.5.
Задайте свойству To действия индексировать.Assign Задайте свойство Value действия "Назначение" на индекс+1.
Настраиваемое действие MyForEach вызывает произвольное действие один раз для каждого значения, переданного в него через коллекцию Items , со значениями в коллекции в качестве входных данных для действия.
Использование настраиваемого действия в рабочем процессе
Создайте проект, нажав клавиши CTRL+SHIFT+B.
В Обозреватель решений откройте Workflow1.xaml в конструкторе.
Перетащите действие MyForEach из панели элементов в область конструктора. Действие находится в разделе панели элементов с тем же именем, что и проект.
Задайте свойству Items действия MyForEach значение new Object[] {1, abc}.
Перетащите WriteLine действие из раздела "Примитивы" панели элементов в раздел "Делегат:Текст" действия MyForEach.
Задайте свойству Text действия WriteLine значение Argument.ToString().
При выполнении рабочего процесса консоль отображает следующие выходные данные:
1abc