Definieren und Verarbeiten von Aktivitätsdelegaten im Workflow-Designer
.NET Framework 4.5 enthält einen vordefinierten Designer für die InvokeDelegate-Aktivität. Der Designer kann verwendet werden, um der Aktivität Delegate zuzuweisen, die von ActivityDelegate, z. B. ActivityAction oder ActivityFunc<TResult>, abgeleitet werden.
Definieren eines Aktivitätsdelegaten
Erstellen Sie ein neues Projekt für eine Workflowkonsolenanwendung.
Hinweis
Falls die Workflow-Projektvorlagen nicht angezeigt wird, installieren Sie zuerst die Komponente Windows Workflow Foundation von Visual Studio. Ausführliche Anweisungen finden Sie unter Installieren von Windows Workflow Foundation.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Hinzufügen>Neues Element aus. Wählen Sie die Kategorie Workflow und dann die Elementvorlage Aktivität aus. Nennen Sie die neue Aktivität MyForEach.xaml, und wählen Sie OK aus.
Die Aktivität wird im Workflow-Designer geöffnet.
Klicken Sie im Workflow-Designer auf die Registerkarte Argumente.
Klicken Sie auf Argument erstellen. Nennen Sie das neue Argument Items.
Wählen Sie Array von [T] in der Spalte Argumenttyp aus.
Wählen Sie im Typbrowser die Option Object und dann OK aus.
Klicken Sie erneut auf Argument erstellen. Nennen Sie das neue Argument Body. Wählen Sie in der Spalte Richtung für das neue Argument Eigenschaft aus.
Wählen Sie in der Spalte „Argumenttyp“ Nach Typen suchen aus.
Geben Sie im Typbrowser im Feld Typname den Namen ActivityAction ein. Wählen Sie ActivityAction<T> in der Strukturansicht aus. Wählen Sie im angezeigten Dropdownmenü Object aus, um dem Argument den ActivityAction<Object>-Typ zuzuweisen.
Ziehen Sie eine While-Aktivität aus dem Abschnitt Ablaufsteuerung der Toolbox auf die Designeroberfläche.
Wählen Sie die While-Aktivität aus, und klicken Sie auf die Registerkarte Variablen.
Wählen Sie Variable erstellen aus. Nennen Sie die neue Variable Index.
Wählen Sie Int32 in der Spalte Variablentyp aus. Übernehmen Sie für Bereich die Vorgabe While, und lassen Sie die Spalte Standard leer.
Legen Sie die Condition-Eigenschaft der While-Aktivität auf index < Items.Length; fest.
Ziehen Sie eine InvokeDelegate-Aktivität aus dem Abschnitt Primitive der Toolbox in den Body der While-Aktivität.
Wählen Sie in der Dropdownliste des Delegaten Body aus.
Klicken Sie im Raster Eigenschaften für die InvokeDelegate-Aktivität auf die Schaltfläche mit den Auslassungszeichen (…), die sich in der Eigenschaft DelegateArguments befindet.
Geben Sie in der Spalte Wert des Arguments mit dem Namen Argument den Wert Items[Index] ein. Klicken Sie auf OK, um das Dialogfeld DelegateArguments zu schließen.
Ziehen Sie eine Assign-Aktivität auf die horizontale Linie unterhalb der InvokeDelegate-Aktivität. Die Assign-Aktivität wird erstellt. Darüber hinaus wird automatisch eine Sequence-Aktivität erstellt, die die beiden Aktivitäten im Body-Abschnitt der MyForEach-Aktivität enthält. Die Sequenz wird benötigt, da der Abschnitt Body nur eine einzige Aktivität enthalten kann. Das automatische Erstellen einer neuen Sequence-Aktivität ist eine neue Funktion von .NET Framework 4.5.
Legen Sie die To-Eigenschaft der Assign-Aktivität auf index fest. Legen Sie die Value-Eigenschaft der Assign-Aktivität auf index+1 fest.
Die benutzerdefinierte MyForEach-Aktivität ruft eine beliebige Aktivität einmal für jeden Wert auf, der über die Items-Auflistung übergeben wird. Dabei werden die Werte in der Auflistung als Eingaben für die Aktivität verwendet.
Verwenden der benutzerdefinierten Aktivität in einem Workflow
Erstellen Sie das Projekt, indem Sie STRG+UMSCHALT+B drücken.
Öffnen Sie im Projektmappen-Explorer die Datei Workflow1.xaml im Designer.
Ziehen Sie eine MyForEach-Aktivität aus der Toolbox auf die Designeroberfläche. Die Aktivität befindet sich in einem Abschnitt der Toolbox mit dem gleichen Namen wie das Projekt.
Legen Sie die Items-Eigenschaft der MyForEach-Aktivität auf new Object[] {1, "abc"} fest.
Ziehen Sie eine WriteLine-Aktivität aus dem Abschnitt Primitive der Toolbox in den Abschnitt Delegate:Body der MyForEach-Aktivität.
Legen Sie die Text-Eigenschaft der WriteLine-Aktivität auf Argument.ToString() fest.
Wenn der Workflow ausgeführt wird, wird in der Konsole die folgende Ausgabe angezeigt:
1abc