Tworzenie działania w czasie wykonywania za pomocą funkcji DynamicActivity
DynamicActivity jest betonową, zapieczętowaną klasą z publicznym konstruktorem. DynamicActivity można używać do tworzenia funkcji działania w czasie wykonywania przy użyciu działania DOM.
Funkcje DynamicActivity
DynamicActivity ma dostęp do właściwości wykonywania, argumentów i zmiennych, ale nie ma dostępu do usług czasu wykonywania, takich jak planowanie działań podrzędnych lub śledzenie.
Właściwości najwyższego poziomu można ustawić przy użyciu obiektów przepływu pracy Argument . W kodzie imperatywne te argumenty są tworzone przy użyciu właściwości CLR w nowym typie. W języku XAML są deklarowane przy użyciu tagów x:Class
i .x:Member
Działania skonstruowane przy użyciu DynamicActivity interfejsu z projektantem przy użyciu polecenia ICustomTypeDescriptor. Działania utworzone w projektancie można ładować dynamicznie przy użyciu metody Load, jak pokazano w poniższej procedurze.
Aby utworzyć działanie w czasie wykonywania przy użyciu kodu imperatywnego
OtwórzVisual Studio 2010.
Wybierz pozycję Plik, Nowy, Projekt. Wybierz pozycję Przepływ pracy 4.0 w obszarze Visual C# w oknie Typy projektów i wybierz węzeł v2010 . Wybierz pozycję Aplikacja konsoli sekwencyjnego przepływu pracy w oknie Szablony . Nadaj nowej nazwie projekt DynamicActivitySample.
Kliknij prawym przyciskiem myszy pozycję Workflow1.xaml w projekcie HelloActivity i wybierz polecenie Usuń.
Otwórz plik Program.cs. Dodaj następującą dyrektywę na początku pliku.
using System.Collections.Generic;
Zastąp zawartość
Main
metody następującym kodem, który tworzy Sequence działanie zawierające jedno WriteLine działanie i przypisuje go do Implementation właściwości nowego działania dynamicznego.//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();
Wykonaj aplikację. Zostanie wyświetlone okno konsoli z tekstem "Hello World!".
Aby utworzyć działanie w czasie wykonywania przy użyciu języka XAML
Otwórz program Visual Studio 2010.
Wybierz pozycję Plik, Nowy, Projekt. Wybierz pozycję Przepływ pracy 4.0 w obszarze Visual C# w oknie Typy projektów i wybierz węzeł v2010 . Wybierz pozycję Aplikacja konsoli przepływu pracy w oknie Szablony . Nadaj nowej nazwie projekt DynamicActivitySample.
Otwórz plik Workflow1.xaml w projekcie HelloActivity. Kliknij opcję Argumenty w dolnej części projektanta. Utwórz nowy
In
argument o nazwieTextToWrite
typuString
.Przeciągnij działanie WriteLine z sekcji Typy pierwotne przybornika na powierzchnię projektanta. Przypisz wartość
TextToWrite
do właściwości Text działania.Otwórz plik Program.cs. Dodaj następującą dyrektywę na początku pliku.
using System.Activities.XamlIntegration;
Zastąp zawartość metody
Main
następującym kodem.Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml"); results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } }); Console.ReadLine();
Wykonaj aplikację. Zostanie wyświetlone okno konsoli z tekstem "Hello World!".
Kliknij prawym przyciskiem myszy plik Workflow1.xaml w Eksplorator rozwiązań i wybierz polecenie Wyświetl kod. Należy pamiętać, że klasa działania jest tworzona za pomocą
x:Class
polecenia , a właściwość jest tworzona za pomocąx:Property
polecenia .