Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
DynamicActivity — это конкретный, закрытый класс с публичным конструктором. DynamicActivity можно использовать для сборки функциональности активности в процессе выполнения с помощью DOM.
Характеристики DynamicActivity
DynamicActivity имеет доступ к свойствам выполнения, аргументам и переменным, но не имеет доступа к службам среды выполнения, таким как планирование дочерних операций или их отслеживание.
Свойства верхнего уровня можно задать с помощью объектов рабочего процесса Argument . В императивном коде эти аргументы создаются с помощью свойств CLR на новом типе. В XAML они объявляются с помощью тегов x:Class и x:Member.
Действия, созданные с использованием интерфейса DynamicActivity, взаимодействуют с конструктором ICustomTypeDescriptor. Действия, созданные в конструкторе, можно загружать динамически с помощью Load, как показано в следующей процедуре.
Создание действия во время выполнения с помощью императивного кода
OpenVisual Studio 2010.
Выберите "Файл", "Создать", "Проект". Выберите рабочий процесс 4.0 в разделе Visual C# в окне "Типы проектов " и выберите узел версии 2010 . Выберите последовательное консольное приложение консоли рабочего процесса в окне шаблонов . Назовите новый проект 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();Выполните приложение. Окно консоли с текстом "Hello World!" отображается.
Создание активности в процессе выполнения с использованием XAML
Откройте Visual Studio 2010.
Выберите "Файл", "Создать", "Проект". Выберите рабочий процесс 4.0 в разделе Visual C# в окне "Типы проектов " и выберите узел версии 2010 . Выберите консольное приложение рабочего процесса в окне "Шаблоны ". Назовите новый проект DynamicActivitySample.
Откройте Workflow1.xaml в проекте HelloActivity. Щелкните параметр "Аргументы" в нижней части конструктора. Создайте новый аргумент
InтипаTextToWrite, с именемString.Перетащите действие WriteLine из раздела «Примитивы» панели элементов на поверхность конструктора. Назначьте значение
TextToWriteсвойству Text действия.Откройте 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();Выполните приложение. Откроется окно консоли с текстом "Hello World!"
Щелкните правой кнопкой мыши файл Workflow1.xaml в обозревателе решений и выберите "Просмотреть код". Обратите внимание, что класс активности создается с помощью
x:Class, а свойство создается с помощьюx:Property.