Een activiteit tijdens runtime maken met DynamicActivity
DynamicActivity is een concrete, verzegelde klasse met een openbare constructor. DynamicActivity kan worden gebruikt om activiteitsfunctionaliteit tijdens runtime samen te stellen met behulp van een activiteitS-DOM.
DynamicActivity-functies
DynamicActivity heeft toegang tot uitvoeringseigenschappen, argumenten en variabelen, maar geen toegang tot runtimeservices, zoals het plannen van onderliggende activiteiten of het bijhouden van onderliggende activiteiten.
Eigenschappen op het hoogste niveau kunnen worden ingesteld met behulp van werkstroomobjecten Argument . In imperatieve code worden deze argumenten gemaakt met behulp van CLR-eigenschappen voor een nieuw type. In XAML worden ze gedeclareerd met behulp van x:Class
en x:Member
tags.
Activiteiten die zijn samengesteld met behulp van DynamicActivity interface met de ontwerpfunctie.ICustomTypeDescriptor Activiteiten die in de ontwerpfunctie zijn gemaakt, kunnen dynamisch worden geladen met behulp van Load, zoals in de volgende procedure wordt gedemonstreerd.
Een activiteit tijdens runtime maken met imperatieve code
OpenVisual Studio 2010.
Selecteer Bestand, Nieuw, Project. Selecteer Workflow 4.0 onder Visual C# in het venster Projecttypen en selecteer het knooppunt v2010 . Selecteer Sequentiële werkstroomconsoletoepassing in het venster Sjablonen . Geef het nieuwe project de naam DynamicActivitySample.
Klik met de rechtermuisknop op Workflow1.xaml in het Project HelloActivity en selecteer Verwijderen.
Open Program.cs. Voeg de volgende instructie toe aan het begin van het bestand.
using System.Collections.Generic;
Vervang de inhoud van de
Main
methode door de volgende code, waarmee een Sequence activiteit wordt gemaakt die één WriteLine activiteit bevat en deze toewijst aan de Implementation eigenschap van een nieuwe dynamische activiteit.//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();
Voer de toepassing uit. Er wordt een consolevenster met de tekst 'Hallo wereld!' weergegeven.
Een activiteit tijdens runtime maken met behulp van XAML
Open Visual Studio 2010.
Selecteer Bestand, Nieuw, Project. Selecteer Workflow 4.0 onder Visual C# in het venster Projecttypen en selecteer het knooppunt v2010 . Selecteer De werkstroomconsoletoepassing in het venster Sjablonen . Geef het nieuwe project de naam DynamicActivitySample.
Open Workflow1.xaml in het Project HelloActivity. Klik op de optie Argumenten onderaan de ontwerpfunctie. Maak een nieuw
In
argument met de naamTextToWrite
van het typeString
.Sleep een WriteLine-activiteit vanuit de sectie Primitieven van de werkset naar het ontwerpoppervlak. Wijs de waarde
TextToWrite
toe aan de eigenschap Text van de activiteit.Open Program.cs. Voeg de volgende instructie toe aan het begin van het bestand.
using System.Activities.XamlIntegration;
Vervang de inhoud van de methode
Main
door de volgende code.Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml"); results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } }); Console.ReadLine();
Voer de toepassing uit. Er wordt een consolevenster met de tekst 'Hallo wereld!' weergegeven.
Klik met de rechtermuisknop op het bestand Workflow1.xaml in Solution Explorer en selecteer Code weergeven. Houd er rekening mee dat de activiteitsklasse wordt gemaakt met
x:Class
en dat de eigenschap wordt gemaakt metx:Property
.