Creazione di un'attività in fase di esecuzione con DynamicActivity
DynamicActivity è una classe sealed concreta con costruttore pubblico. DynamicActivity può essere usata per assemblare la funzionalità di attività in fase di esecuzione tramite un unico DOM di attività.
Funzionalità DynamicActivity
La classe DynamicActivity dispone dell'accesso alle proprietà, agli argomenti e alle variabili di esecuzione, ma non ai servizi in fase di esecuzione quali la pianificazione di attività figlio o il rilevamento.
Usando gli oggetti Argument del flusso di lavoro è possibile impostare le proprietà di primo livello. Nel codice imperativo, questi argomenti vengono creati usando le proprietà CLR in un nuovo tipo. In XAML, vengono dichiarati usando i tag x:Class
e x:Member
.
Le attività costruite usando la classe DynamicActivity si interfacciano con l'utilità di progettazione tramite l'oggetto ICustomTypeDescriptor. Le attività create nell'utilità di progettazione possono essere caricate usando il metodo Load in modo dinamico, come dimostrato nella procedura riportata di seguito.
Per creare un'attività in fase di esecuzione usando il codice imperativo
Aprire OpenVisual Studio 2010.
Scegliere File, Nuovo, Progetto. Selezionare Workflow 4.0 sotto Visual C# nella finestra Tipi progetto e scegliere il nodo v2010. Selezionare Applicazione console flusso di lavoro sequenziale nella finestra Modelli. Assegnare il nome DynamicActivitySample al nuovo progetto.
Fare clic con il pulsante destro del mouse su Workflow1.xaml nel progetto HelloActivity e selezionare Elimina.
Aprire Program.cs. Aggiungere la seguente direttiva all'inizio del file.
using System.Collections.Generic;
Sostituire il contenuto del metodo
Main
con il codice seguente che crea un'attività Sequence che contiene una singola attività WriteLine e la assegna alla proprietà Implementation di una nuova attività dinamica.//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();
Eseguire l'applicazione. Viene visualizzata una finestra della console con il testo "Hello World!".
Per creare un'attività in fase di esecuzione usando il codice XAML
Aprire Visual Studio 2010.
Scegliere File, Nuovo, Progetto. Selezionare Workflow 4.0 sotto Visual C# nella finestra Tipi progetto e scegliere il nodo v2010. Selezionare Applicazione console flusso di lavoro nella finestra Modelli. Assegnare il nome DynamicActivitySample al nuovo progetto.
Aprire Workflow1.xaml nel progetto HelloActivity. Fare clic sull'opzione Argomenti nella parte inferiore dell'utilità di progettazione. Creare un nuovo argomento
In
denominatoTextToWrite
di tipoString
.Trascinare un'attività WriteLine dalla sezione Primitive della casella degli strumenti nell'area di progettazione. Assegnare il valore
TextToWrite
alla proprietà Text dell'attività.Aprire Program.cs. Aggiungere la seguente direttiva all'inizio del file.
using System.Activities.XamlIntegration;
Sostituire il contenuto del metodo
Main
con il codice seguente.Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml"); results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } }); Console.ReadLine();
Eseguire l'applicazione. Viene visualizzata una finestra della console con il testo "Hello World!".
Fare clic con il pulsante destro del mouse sul file Workflow1.xaml in Esplora soluzioni e scegliere Visualizza codice. Si noti che la classe di attività viene creata con
x:Class
e la proprietà viene creata conx:Property
.