Definir y usar delegados de actividad en el Diseñador de flujo de trabajo

.NET Framework 4.5 incluye un diseñador listo para usar para la actividad InvokeDelegate. Este diseñador se puede usar para asignar delegados a la actividad que se derivan de ActivityDelegate, como ActivityAction o ActivityFunc<TResult>.

Definir un delegado de actividad

  1. Cree un proyecto de aplicación de consola de flujos de trabajo.

    Nota

    Si no ve las plantillas de proyecto de Flujo de trabajo, instale primero el componente Windows Workflow Foundation de Visual Studio. Para obtener instrucciones detalladas, consulte Instalación de Windows Workflow Foundation.

  2. Haga clic con el botón derecho en el Explorador de soluciones y seleccione Agregar>Nuevo elemento. Seleccione la categoría Flujo de trabajo y, a continuación, seleccione la plantilla de elemento Actividad. Asigne a la nueva actividad el nombre MyForEach.xaml y haga clic en Aceptar.

    La actividad se abre en el diseñador de flujo de trabajo.

  3. En el Diseñador de flujo de trabajo, haga clic en la pestaña Argumentos.

  4. Haga clic en Crear argumento. Asigne al nuevo argumento el nombre Elementos.

  5. En la columna Tipo de argumento, seleccione Matriz de [T].

  6. En el explorador de tipos, seleccione Objeto y, a continuación, seleccione Aceptar.

  7. Haga clic de nuevo en Crear argumento. Asigne al nuevo argumento el nombre Cuerpo. En la columna Dirección para el nuevo argumento, seleccione Propiedad.

  8. En la columna Tipo de argumento, seleccione Buscar tipos.

  9. En el explorador de tipo, escriba ActivityAction en el campo Nombre de tipo. Seleccione ActivityAction<T> en la vista de árbol. Seleccione Objeto en el desplegable que aparece para asignar el tipo ActivityAction<Objeto> al argumento.

  10. Arrastre una actividad While de la sección Flujo de control del cuadro de herramientas a la superficie del diseñador.

  11. Seleccione la actividad While y seleccione la pestaña Variables.

  12. Seleccione Crear variable. Asigne a la nueva variable el nombre Índice.

  13. En la columna Tipo de variable, seleccione Int32. Deje Ámbito como While y la columna Valor predeterminado en blanco.

  14. Establezca la propiedad Condition de la actividad While en index < Items.Length;.

  15. Arrastre una actividad InvokeDelegate de la sección Primitivas del cuadro de herramientas al Cuerpo de la actividad While.

  16. Seleccione Cuerpo en el desplegable de delegado.

  17. En la cuadrícula Propiedades para la actividad InvokeDelegate, haga clic en el botón ... en la propiedad Argumentos de delegado.

  18. En la columna Valor del argumento denominado Argumento, escriba Elementos[Índice]. Haga clic en Aceptar para cerrar el cuadro de diálogo DelegateArguments.

  19. Arrastre una actividad Assign sobre la línea horizontal bajo la actividad InvokeDelegate. La actividad Assign se creará y se creará automáticamente una actividad Sequence para contener las dos actividades en la sección Cuerpo de la actividad MyForEach. La secuencia es necesaria porque la sección Cuerpo puede contener una sola actividad. La creación automática de una nueva actividad Sequence es una nueva característica de .NET Framework 4.5.

  20. Establezca la propiedad To de la actividad Assign en index. Establezca la propiedad Value de la actividad Assign en index+1.

    La actividad personalizada MyForEach invoca una actividad arbitraria una vez por cada valor pasado en ella mediante la colección Items, con los valores de la colección como entradas para la actividad.

Usar la actividad personalizada en un flujo de trabajo

  1. Presione Ctrl+Mayús+B para compilar el proyecto.

  2. En el Explorador de soluciones, abra Workflow1.xaml en el diseñador.

  3. Arrastre una actividad MyForEach desde el cuadro de herramientas a la superficie del diseñador. La actividad está en una sección del cuadro de herramientas con el mismo nombre que el proyecto.

  4. Establezca la propiedad Items de la actividad MyForEach en new Object[] {1, "abc"}.

  5. Arrastre una actividad WriteLine desde la sección Primitivas del cuadro de herramientas a la sección Delegate:Body de la actividad MyForEach.

  6. Establezca la propiedad Text de la actividad WriteLine en Argument.ToString().

Cuando se ejecuta el flujo de trabajo, la consola muestra la siguiente salida:

1abc