Vorgehensweise: Erstellen einer Aktivität
Aktivitäten sind die wichtigsten Einheiten für das Verhalten in WF. Die Ausführungslogik einer Aktivität kann in verwaltetem Code oder mithilfe anderer Aktivitäten implementiert werden. In diesem Thema wird veranschaulicht, wie zwei Aktivitäten erstellt werden. Die erste Aktivität ist eine einfache Aktivität, die die Ausführungslogik auf der Basis von Code implementiert. Die Implementierung der zweiten Aktivität wird mithilfe anderer Aktivitäten definiert. Diese Aktivitäten werden in den folgenden Schritten des Lernprogramms verwendet.
Erstellen des Workflow-Aktivitätsbibliothekprojekts
Öffnen Sie Visual Studio, und wählen Sie im Menü Datei die Option Neu>Projekt aus.
Wählen Sie im Dialogfeld Neues Projekt unter der Kategorie Installiert die Option Visual C#>Workflow (oder Visual Basic>Workflow) aus.
Hinweis
Wenn die Vorlagenkategorie Workflow nicht angezeigt wird, müssen Sie möglicherweise die Komponente Windows Workflow Foundation von Visual Studio installieren. Wählen Sie im Dialogfeld Neues Projekt auf der linken Seite den Link Visual Studio-Installer öffnen aus. Wählen Sie in Visual Studio-Installer die Registerkarte Einzelne Komponenten aus. Wählen Sie dann unter der Kategorie Entwicklungsaktivitäten die Komponente Windows Workflow Foundation aus. Wählen Sie Ändern aus, um die Komponenten zu installieren.
Wählen Sie die Projektvorlage Aktivitätsbibliothek aus. Geben Sie
NumberGuessWorkflowActivities
in das Feld Name ein, und klicken Sie dann auf OK.Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Activity1.xaml, und wählen Sie dann Löschen aus. Klicken Sie auf OK , um zu bestätigen.
Erstellen der ReadInt-Aktivität
Wählen Sie im Menü Projekt die Option Neues Element hinzufügen aus.
Wählen Sie im Knoten Installiert>Gemeinsame Elemente die Option Workflow. Wählen Sie in der Liste Workflow die Option Codeaktivität aus.
Geben Sie
ReadInt
in das Feld Name ein, und klicken Sie dann auf Hinzufügen.Ersetzen Sie die vorhandene
ReadInt
-Definition durch die folgende Definition.public sealed class ReadInt : NativeActivity<int> { [RequiredArgument] public InArgument<string> BookmarkName { get; set; } protected override void Execute(NativeActivityContext context) { string name = BookmarkName.Get(context); if (string.IsNullOrEmpty(name)) { throw new ArgumentException("BookmarkName cannot be an Empty string.", "context"); } context.CreateBookmark(name, new BookmarkCallback(OnReadComplete)); } // NativeActivity derived activities that do asynchronous operations by calling // one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext // must override the CanInduceIdle property and return true. protected override bool CanInduceIdle { get { return true; } } void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state) { this.Result.Set(context, Convert.ToInt32(state)); } }
Public NotInheritable Class ReadInt Inherits NativeActivity(Of Integer) <RequiredArgument()> Property BookmarkName() As InArgument(Of String) Protected Overrides Sub Execute(ByVal context As NativeActivityContext) Dim name As String name = BookmarkName.Get(context) If name = String.Empty Then Throw New Exception("BookmarkName cannot be an Empty string.") End If context.CreateBookmark(name, New BookmarkCallback(AddressOf OnReadComplete)) End Sub ' NativeActivity derived activities that do asynchronous operations by calling ' one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext ' must override the CanInduceIdle property and return True. Protected Overrides ReadOnly Property CanInduceIdle As Boolean Get Return True End Get End Property Sub OnReadComplete(ByVal context As NativeActivityContext, ByVal bookmark As Bookmark, ByVal state As Object) Result.Set(context, Convert.ToInt32(state)) End Sub End Class
Hinweis
Die
ReadInt
-Aktivität wird von NativeActivity<TResult> statt von CodeActivity abgeleitet. Das entspricht dem Standard für die Vorlage "Codeaktivität". CodeActivity<TResult> kann verwendet werden, wenn die Aktivität ein einziges Ergebnis bereitstellt, das durch das Result-Argument verfügbar gemacht wird, da CodeActivity<TResult> jedoch nicht die Verwendung von Lesezeichen unterstützt, wird NativeActivity<TResult> verwendet.
Erstellen der Eingabeaufforderungsaktivität
Drücken Sie STRG+UMSCHALT+B, um das Projekt zu erstellen. Durch das Erstellen des Projekts wird die
ReadInt
-Aktivität in diesem Projekt erstellt, mit der die benutzerdefinierte Aktivität aus diesem Schritt erstellt werden soll.Wählen Sie im Menü Projekt die Option Neues Element hinzufügen aus.
Wählen Sie im Knoten Installiert>Gemeinsame Elemente die Option Workflow. Wählen Sie Aktivität aus der Liste Workflow aus.
Geben Sie
Prompt
in das Feld Name ein, und klicken Sie dann auf Hinzufügen.Doppelklicken Sie im Projektmappen-Explorer auf Prompt.xaml, um die Datei im Designer anzuzeigen, falls dies nicht bereits der Fall ist.
Klicken Sie unten links im Aktivitäts-Designer auf Argumente, um den Bereich Argumente anzuzeigen.
Klicken Sie auf Argument erstellen.
Geben Sie
BookmarkName
in das Feld Name ein, wählen Sie Ein aus der Dropdownliste Richtung aus, wählen Sie Zeichenfolge aus der Dropdownliste Argumenttyp aus, und drücken Sie dann die EINGABETASTE, um das Argument zu speichern.Klicken Sie auf Argument erstellen.
Geben Sie in das Feld Name, das unter dem neu hinzugefügten Argument
BookmarkName
angezeigt wird,Result
ein. Wählen Sie aus der Dropdownliste Richtung die Richtung Aus und aus der Dropdownliste Argumenttyp die Option Int32 aus, und drücken Sie dann die EINGABETASTE.Klicken Sie auf Argument erstellen.
Geben Sie
Text
in das Feld Name ein, wählen Sie Ein aus der Dropdownliste Richtung aus, wählen Sie Zeichenfolge aus der Dropdownliste Argumenttyp aus, und drücken Sie dann die EINGABETASTE, um das Argument zu speichern.Diese drei Argumente werden an die entsprechenden Argumente der WriteLine-Aktivität und
ReadInt
-Aktivität gebunden, die derPrompt
-Aktivität in den folgenden Schritten hinzugefügt werden.Klicken Sie unten links im Aktivitäts-Designer auf Argumente, um den Bereich Argumente zu schließen.
Ziehen Sie eine Sequence-Aktivität aus dem Abschnitt Ablaufsteuerung der Toolbox, und legen Sie sie auf der Bezeichnung Aktivität hier ablegen des Designers der Prompt-Aktivität ab.
Tipp
Wird das Fenster Toolbox nicht angezeigt, wählen Sie Toolbox im Menü Ansicht aus.
Ziehen Sie eine WriteLine-Aktivität aus dem Abschnitt Primitive der Toolbox, und legen Sie sie auf der Bezeichnung Aktivität hier ablegen der Sequence-Aktivität ab.
Binden Sie das Text-Argument der WriteLine-Aktivität an das Text-Argument der Prompt-Aktivität, indem Sie im Fenster Eigenschaften im Feld C#-Ausdruck eingeben oder VB-Ausdruck eingeben
Text
eingeben und dann zwei Mal die TAB-TASTE drücken. Dadurch wird das Fenster mit den IntelliSense-Listenmembern geschlossen und der Eigenschaftswert gespeichert, indem die Auswahl der Eigenschaft aufgehoben wird. Diese Eigenschaft kann auch festgelegt werden, indem Sie in das Feld C#-Ausdruck eingeben oder VB-Ausdruck eingeben der AktivitätText
eingeben.Tipp
Wenn das Eigenschaftenfenster nicht angezeigt wird, wählen Sie Eigenschaftenfenster im Menü Ansicht aus.
Ziehen Sie eine ReadInt-Aktivität aus dem Abschnitt NumberGuessWorkflowActivities der Toolbox, und legen Sie sie in der Sequence-Aktivität ab, sodass sie unmittelbar auf die WriteLine-Aktivität folgt.
Binden Sie das BookmarkName-Argument der ReadInt-Aktivität an das BookmarkName-Argument der Prompt-Aktivität, indem Sie im Fenster Eigenschaften im Feld VB-Ausdruck eingeben neben dem BookmarkName-Argument die Bezeichnung
BookmarkName
eingeben. Drücken Sie dann die TAB-TASTE zwei Mal, um das Fenster mit den IntelliSense-Listenmembern zu schließen und die Eigenschaft zu speichern.Binden Sie das Result-Argument der ReadInt-Aktivität an das Result-Argument der Prompt-Aktivität, indem Sie im Fenster Eigenschaften im Feld VB-Ausdruck eingeben neben dem Result-Argument die Bezeichnung
Result
eingeben. Drücken Sie dann die TAB-TASTE zwei Mal, um das Fenster mit den IntelliSense-Listenmembern zu schließen und die Eigenschaft zu speichern.Drücken Sie STRG+UMSCHALT+B, um die Projektmappe zu erstellen.
Nächste Schritte
Anweisungen zum Erstellen eines Workflows mithilfe dieser Aktivitäten finden Sie im nächsten Tutorial: Erstellen eines Workflows.