Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
DynamicActivity es una clase concreta sellada con un constructor público. DynamicActivity se puede usar para ensamblar la funcionalidad de actividad en tiempo de ejecución con un DOM de actividad.
Características de DynamicActivity
DynamicActivity tiene acceso a propiedades, argumentos y variables de ejecución, pero no tiene acceso a servicios en tiempo de ejecución, como programar actividades secundarias o realizar el seguimiento.
Las propiedades de nivel superior se pueden establecer mediante objetos de flujo de trabajo Argument . En el código imperativo, estos argumentos se crean mediante propiedades CLR en un nuevo tipo. En XAML, se declaran mediante las etiquetas x:Class
y x:Member
.
Las actividades construidas utilizando DynamicActivity interactúan con el diseñador a través de ICustomTypeDescriptor. Las actividades creadas en el diseñador se pueden cargar dinámicamente mediante Load, como se muestra en el procedimiento siguiente.
Para crear una actividad en tiempo de ejecución mediante código imperativo
OpenVisual Studio 2010.
Seleccione Archivo, Nuevo, Proyecto. Seleccione Flujo de trabajo 4.0 en Visual C# en la ventana Tipos de proyecto y seleccione el nodo v2010 . Seleccione Aplicación de consola de flujos de trabajo secuenciales en la ventana Plantillas. Asigne al nuevo proyecto el nombre DynamicActivitySample.
Haga clic con el botón derecho en Workflow1.xaml en el proyecto HelloActivity y seleccione Eliminar.
Abra el archivo Program.cs. Agregue la siguiente directiva a la parte superior del archivo.
using System.Collections.Generic;
Reemplace el contenido del
Main
método por el código siguiente, que crea una Sequence actividad que contiene una sola WriteLine actividad y la asigna a la Implementation propiedad de una nueva actividad dinámica.//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();
Ejecute la aplicación. Se muestra una ventana de consola con el texto "Hola mundo".
Para crear una actividad en tiempo de ejecución mediante XAML
Abre Visual Studio 2010.
Seleccione Archivo, Nuevo, Proyecto. Seleccione Flujo de trabajo 4.0 en Visual C# en la ventana Tipos de proyecto y seleccione el nodo v2010 . En la ventana Plantillas, seleccione Aplicación de consola de flujo de trabajo. Asigne al nuevo proyecto el nombre DynamicActivitySample.
Abra Workflow1.xaml en el proyecto HelloActivity. Haga clic en la opción Argumentos en la parte inferior del diseñador. Cree un nuevo
In
argumento denominadoTextToWrite
de tipoString
.Arrastre una actividad WriteLine de la sección Primitivas del cuadro de herramientas a la superficie del diseñador. Asigne el valor
TextToWrite
a la propiedad Text de la actividad.Abra el archivo Program.cs. Agregue la siguiente directiva a la parte superior del archivo.
using System.Activities.XamlIntegration;
Reemplace el contenido del método
Main
con el siguiente código.Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml"); results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } }); Console.ReadLine();
Ejecute la aplicación. Aparece una ventana de consola con el texto "Hola mundo".
Haga clic con el botón derecho en el archivo Workflow1.xaml en el Explorador de soluciones y seleccione Ver código. Tenga en cuenta que la clase de actividad se crea con
x:Class
y la propiedad se crea conx:Property
.