Freigeben über


Erstellen einer Aktivität zur Laufzeit mit DynamicActivity

DynamicActivity ist eine konkrete, versiegelte Klasse mit einem öffentlichen Konstruktor. DynamicActivity kann zur Zusammenstellung von Aktivitätsfunktionen zur Laufzeit mit einem Aktivitäts-DOM verwendet werden.

DynamicActivity-Funktionen

DynamicActivity hat Zugriff auf Ausführungseigenschaften, Argumente und Variablen, aber keinen Zugriff auf Laufzeitdienste, z. B. das Planen von untergeordneten Aktivitäten oder die Nachverfolgung.

Eigenschaften der obersten Ebene können mithilfe von Workflowobjekten Argument festgelegt werden. Im imperativen Code werden diese Argumente mithilfe von CLR-Eigenschaften für einen neuen Typ erstellt. In XAML werden sie mithilfe x:Class und x:Member Tags deklariert.

Aktivitäten werden mit der DynamicActivity-Schnittstelle erstellt und interagieren mit dem Designer über ICustomTypeDescriptor. Im Designer erstellte Aktivitäten können dynamisch geladen werden mit Load, wie im folgenden Verfahren gezeigt.

So erstellen Sie eine Aktivität während der Ausführung mit imperativem Code

  1. OpenVisual Studio 2010.

  2. Wählen Sie "Datei", "Neu", "Projekt" aus. Wählen Sie "Workflow 4.0" unter Visual C# im Fenster "Projekttypen " und dann den Knoten "v2010 " aus. Wählen Sie im Vorlagenfenster die Sequenzielle Workflowkonsolenanwendung aus. Benennen Sie das neue Projekt DynamicActivitySample.

  3. Klicken Sie im HelloActivity-Projekt mit der rechten Maustaste auf "Workflow1.xaml", und wählen Sie "Löschen" aus.

  4. Öffnen Sie die Datei Program.cs. Fügen Sie die folgende Direktive am Anfang der Datei hinzu.

    using System.Collections.Generic;  
    
  5. Ersetzen Sie den Inhalt der Main Methode durch den folgenden Code, der eine Aktivität erstellt, die eine Sequence einzelne WriteLine Aktivität enthält, und weist sie der Implementation Eigenschaft einer neuen dynamischen Aktivität zu.

    //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();  
    
  6. Führen Sie die Anwendung aus. Ein Konsolenfenster mit dem Text "Hello World!" wird angezeigt.

So erstellen Sie eine Aktivität während der Laufzeit mithilfe von XAML

  1. Öffnen Sie Visual Studio 2010.

  2. Wählen Sie "Datei", "Neu", "Projekt" aus. Wählen Sie "Workflow 4.0" unter Visual C# im Fenster "Projekttypen " und dann den Knoten "v2010 " aus. Wählen Sie im Vorlagenfenster die Workflowkonsolenanwendung aus. Benennen Sie das neue Projekt DynamicActivitySample.

  3. Öffnen Sie Workflow1.xaml im HelloActivity-Projekt. Klicken Sie unten im Designer auf die Option "Argumente ". Erstellen Sie ein neues In-Argument mit dem Namen TextToWrite und dem Typ String.

  4. Ziehen Sie eine WriteLine-Aktivität aus dem Abschnitt Primitives der Toolbox auf die Designeroberfläche. Weisen Sie den Wert TextToWrite der Text-Eigenschaft der Aktivität zu.

  5. Öffnen Sie die Datei Program.cs. Fügen Sie die folgende Direktive am Anfang der Datei hinzu.

    using System.Activities.XamlIntegration;  
    
  6. Ersetzen Sie die Inhalte der Main-Methode durch den folgenden Code.

    Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml");  
                    results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } });  
    Console.ReadLine();  
    
  7. Führen Sie die Anwendung aus. Ein Konsolenfenster mit dem Text "Hello World!" wird angezeigt.

  8. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Datei "Workflow1.xaml", und wählen Sie "Code anzeigen" aus. Beachten Sie, dass die Aktivitätsklasse mit x:Class erstellt wird und die Eigenschaft mit x:Property.

Siehe auch