Создание действия в среде выполнения с динамическим действием
Данный раздел относится к версии Windows Workflow Foundation 4.
Класс DynamicActivity представляет собой конкретный ненаследуемый класс с открытым конструктором. DynamicActivity может использоваться для объединения функций действий во время выполнения при помощи DOM действия.
Функции DynamicActivity
DynamicActivity имеет доступ к свойствам, аргументам и переменным выполнения, но не имеет доступа к службам среды выполнения, таким как дочерние действия планирования и отслеживание.
Значения свойств верхнего уровня можно задавать при помощи объектов рабочих процессов Argument. В императивном коде эти аргументы создаются при помощи свойств среды CLR в новом типе. На языке XAML такие аргументы объявляются при помощи тегов x:Class
и x:Member
.
Действия, построенные при помощи интерфейса DynamicActivity в конструкторе, использующем ICustomTypeDescriptor. Действия, созданные в конструкторе, можно загружать динамически с помощью Load, как показано в следующей процедуре.
Создание действия во время выполнения при помощи императивного кода
Откройте среду Visual Studio 2010.
Выберите Файл, Создать, Проект. Выберите Workflow 4.0 в списке Visual C# в разделе Типы проектов, затем выберите узел v2010. В окне Шаблоны выберите пункт Консольное приложение последовательных рабочих процессов. Задайте имя для нового проекта DynamicActivitySample.
Щелкните правой кнопкой мыши файл Workflow1.xaml в проекте HelloActivity и выберите команду Удалить.
Откройте файл Program.cs. Добавьте следующую директиву в начало файла.
using System.Collections.Generic;
Замените содержимое метода
Main
следующим кодом, который создаст действие Sequence, содержащее отдельное действие WriteLine, и назначит его свойству Implementation нового динамического действия.//Define the input argument for the activity var textOut = new InArgument<string>(); //Create the activity, property, and implementation Activity dynamicWorkflow = new DynamicActivity() { Properties = { new DynamicActivityProperty { Name = "Text", Type = typeof(InArgument<String>), Value = textOut } }, Implementation = () => new Sequence() { Activities = { new WriteLine() { Text = new InArgument<string>(env => textOut.Get(env)) } } } }; //Execute the activity with a parameter dictionary WorkflowInvoker.Invoke(dynamicWorkflow, new Dictionary<string, object> { { "Text", "Hello World!" } }); Console.ReadLine();
Выполните приложение. Откроется окно консоли с текстом «Здравствуй, мир!».
Создание действия во время выполнения при помощи языка XAML
Откройте Visual Studio 2010.
Выберите Файл, Создать, Проект. Выберите Workflow 4.0 в списке Visual C# в разделе Типы проектов, затем выберите узел v2010. В окне Шаблоны выберите пункт Консольное приложение рабочих процессов. Задайте имя для нового проекта DynamicActivitySample.
Откройте файл Workflow1.xaml в проекте HelloActivity. В нижней части конструктора выберите параметр Аргументы. Создайте новый аргумент In, вызываемый методом
TextToWrite
типа String.Перетащите действие WriteLine из раздела Примитивы области элементов в область конструктора. Присвойте значение TextToWrite свойству Текст данного действия.
Откройте файл Program.cs. Добавьте следующую директиву в начало файла.
using System.Activities.XamlIntegration;
Замените содержимое метода
Main
следующим кодом.Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml"); results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } }); Console.ReadLine();
Выполните приложение. Откроется окно консоли с текстом «Здравствуй, мир!».
Щелкните правой кнопкой мыши файл Workflow1.xaml в обозревателе решений и выберите команду Посмотреть код. Следует отметить, что класс действия создается при помощи
x:Class
, а свойство — при помощиx:Property
.
См. также
Задачи
Создание действия DynamicActivity