Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
DynamicActivity è una classe concreta e sigillata con un costruttore pubblico. DynamicActivity può essere usato per assemblare le funzionalità dell'attività in fase di esecuzione usando un DOM delle attività.
Funzionalità DynamicActivity
DynamicActivity ha accesso a proprietà di esecuzione, argomenti e variabili, ma non ha accesso ai servizi durante l'esecuzione, come la pianificazione delle attività figlie o il rilevamento.
Le proprietà di primo livello possono essere impostate usando oggetti flusso di lavoro Argument . Nel codice imperativo questi argomenti vengono creati usando le proprietà CLR in un nuovo tipo. In XAML vengono dichiarati usando x:Class
tag e x:Member
.
Le attività costruite mediante DynamicActivity interagiscono con il progettista tramite ICustomTypeDescriptor. Le attività create nella finestra di progettazione possono essere caricate in modo dinamico usando Load, come illustrato nella procedura seguente.
Per creare un'attività in fase di esecuzione usando codice imperativo
OpenVisual Studio 2010.
Selezionare File, Nuovo, Progetto. Selezionare Flusso di lavoro 4.0 in Visual C# nella finestra Tipi di progetto e selezionare il nodo v2010 . Selezionare nella finestra Modelli l'Applicazione console per il flusso di lavoro sequenziale. Denominare il nuovo progetto DynamicActivitySample.
Fare clic con il pulsante destro del mouse su Workflow1.xaml nel progetto HelloActivity e scegliere Elimina.
Aprire Program.cs. Aggiungere la direttiva seguente all'inizio del file.
using System.Collections.Generic;
Sostituire il contenuto del
Main
metodo con il codice seguente, che crea un'attività Sequence che contiene una singola WriteLine attività e la assegna alla Implementation proprietà 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 XAML
Aprire Visual Studio 2010.
Selezionare File, Nuovo, Progetto. Selezionare Flusso di lavoro 4.0 in Visual C# nella finestra Tipi di progetto e selezionare il nodo v2010 . Selezionare Applicazione console Workflow nella finestra Modelli. Denominare il nuovo progetto DynamicActivitySample.
Aprire Workflow1.xaml nel progetto HelloActivity. Fare clic sull'opzione Argomenti nella parte inferiore della finestra di progettazione. Creare un argomento
In
nuovo 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 direttiva seguente all'inizio del file.
using System.Activities.XamlIntegration;
Sostituire il contenuto del
Main
metodo 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
.