Vorgehensweise: Erstellen eines Zustandsautomatworkflows
Workflows können aus integrierten Aktivitäten und aus benutzerdefinierten Aktivitäten erstellt werden. In diesem Thema wird die Erstellung eines Workflows mit integrierten Aktivitäten wie der StateMachine-Aktivität sowie benutzerdefinierten Aktivitäten aus dem vorherigen Thema zum Erstellen einer Aktivität Schritt für Schritt erläutert. Der Workflow erstellt ein Spiel, das Zahlen errät.
Hinweis
Ein Thema im Lernprogramm "Erste Schritte" hängt jeweils von den vorherigen Themen ab. Um dieses Thema abschließen zu können, müssen Sie zuerst Erstellen einer Aktivität durcharbeiten.
So erstellen Sie den Workflow
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf NumberGuessWorkflowActivities, und wählen Sie Hinzufügen und dann Neues Element aus.
Wählen Sie im Knoten Gemeinsame Elemente unter Installiert die Option Workflow aus. Wählen Sie Aktivität aus der Liste Workflow aus.
Geben Sie im Feld Name die Bezeichnung
StateMachineNumberGuessWorkflow
ein, und klicken Sie auf OK.Ziehen Sie eine StateMachine-Aktivität aus dem Abschnitt Zustandsautomat der Toolbox, und legen Sie sie auf der Bezeichnung Aktivität hier ablegen auf der Entwurfsoberfläche des Workflows ab.
So erstellen Sie die Workflowvariablen und -argumente
Doppelklicken Sie im Projektmappen-Explorer auf StateMachineNumberGuessWorkflow.xaml, um den Workflow im Designer anzuzeigen, falls er nicht bereits angezeigt wird.
Klicken Sie links unten im Workflow-Designer auf die Schaltfläche Argumente, um den Bereich Argumente anzuzeigen.
Klicken Sie auf Argument erstellen.
Geben Sie
MaxNumber
in das Feld Name ein. Wählen Sie In in der Dropdownliste Richtung und dann Int32 in der Dropdownliste Argumenttyp aus, und drücken Sie dann die EINGABETASTE, um das Argument zu speichern.Klicken Sie auf Argument erstellen.
Geben Sie
Turns
in das Feld Name unter dem neu hinzugefügtenMaxNumber
-Argument ein. Wählen Sie Aus in der Dropdownliste Richtung und Int32 in der Dropdownliste Argumenttyp aus, und drücken Sie dann die EINGABETASTE.Klicken Sie unten links im Aktivitäts-Designer auf Argumente, um den Bereich Argumente zu schließen.
Klicken Sie links unten im Workflow-Designer auf Variablen, um den Bereich Variablen anzuzeigen.
Klicken Sie auf Variable erstellen.
Tipp
Wenn das Feld Variable erstellen nicht angezeigt wird, klicken Sie auf der Oberfläche des Workflow-Designers auf die StateMachine-Aktivität, um sie auszuwählen.
Geben Sie
Guess
im Feld Name ein. Wählen Sie Int32 in der Dropdownliste Variablentyp aus, und drücken Sie dann die EINGABETASTE, um die Variable zu speichern.Klicken Sie auf Variable erstellen.
Geben Sie
Target
im Feld Name ein. Wählen Sie Int32 in der Dropdownliste Variablentyp aus, und drücken Sie dann die EINGABETASTE, um die Variable zu speichern.Klicken Sie unten links im Aktivitäts-Designer auf Variablen, um den Bereich Variablen zu schließen.
So fügen Sie die Workflowaktivitäten hinzu
Klicken Sie auf State1, um ihn auszuwählen. Ändern Sie im Eigenschaftenfenster die Option DisplayName in
Initialize Target
Ziel initialisieren.Tipp
Wenn das Eigenschaftenfenster nicht angezeigt wird, wählen Sie Eigenschaftenfenster im Menü Ansicht aus.
Doppelklicken Sie im Workflow-Designer auf den umbenannten Zustand Ziel initialisieren, um ihn aufzuklappen.
Ziehen Sie eine Assign-Aktivität aus dem Abschnitt Primitives der Toolbox, und legen Sie sie auf dem Abschnitt Entry des Zustands ab. Geben Sie
Target
im Feld To und den folgenden Ausdruck in das Feld C#-Ausdruck eingeben oder VB-Ausdruck eingeben ein.New System.Random().Next(1, MaxNumber + 1)
new System.Random().Next(1, MaxNumber + 1)
Tipp
Wird das Fenster Toolbox nicht angezeigt, wählen Sie Toolbox im Menü Ansicht aus.
Kehren Sie zur allgemeinen Zustandsautomatenansicht im Workflow-Designer zurück, indem Sie in der Breadcrumb-Anzeige am oberen Rand des Workflow-Designers StateMachine auswählen.
Ziehen Sie eine State-Aktivität aus dem Abschnitt Zustandsautomat der Toolbox auf den Zustand Ziel initialisieren im Workflow-Designer. Beachten Sie, dass um den Zustand Ziel initialisieren vier Dreiecke angezeigt werden, wenn sich der neue Zustand darüber befindet. Legen Sie den neuen Zustand auf dem Dreieck ab, das sich unmittelbar unterhalb des Zustands Ziel initialisieren befindet. Dadurch wird der neue Zustand im Workflow positioniert und ein Übergang vom Zustand Ziel initialisieren zum neuen Zustand erstellt.
Klicken Sie auf State1, um ihn auszuwählen, ändern Sie DisplayName in
Enter Guess
, und doppelklicken Sie dann auf den Zustand im Workflow-Designer, um ihn aufzuklappen.Ziehen Sie eine WriteLine-Aktivität aus dem Abschnitt Primitives der Toolbox, und legen Sie sie auf dem Abschnitt Entry des Zustands ab.
Geben Sie den folgenden Ausdruck in das Eigenschaftenfeld Text von WriteLine ein.
"Please enter a number between 1 and " & MaxNumber
"Please enter a number between 1 and " + MaxNumber
Ziehen Sie eine Assign-Aktivität aus dem Abschnitt Primitives der Toolbox, und legen Sie sie auf dem Abschnitt Exit des Zustands ab.
Geben Sie
Turns
im Feld To undTurns + 1
im Feld C#-Ausdruck eingeben oder VB-Ausdruck eingeben ein.Kehren Sie zur allgemeinen Zustandsautomatenansicht im Workflow-Designer zurück, indem Sie in der Breadcrumb-Anzeige am oberen Rand des Workflow-Designers StateMachine auswählen.
Ziehen Sie eine FinalState-Aktivität aus dem Abschnitt Zustandsautomat der Toolbox auf den Zustand Enter Guess. Legen Sie sie auf dem rechts neben dem Zustand Enter Guess angezeigten Dreieck ab, sodass ein Übergang zwischen Enter Guess und FinalState erstellt wird.
Der Standardname des Übergangs lautet T2. Klicken Sie auf den Übergang im Workflow-Designer, um ihn auszuwählen, und legen Sie dessen DisplayName auf Guess Correct fest. Klicken Sie dann auf FinalState, wählen Sie ihn aus. Ziehen Sie ihn nach rechts, damit genügend Platz vorhanden ist, um den vollständigen Namen des Übergangs anzuzeigen, ohne einen der beiden Zustände zu überlagern. Das vereinfacht die Ausführung der verbleibenden Schritte im Lernprogramm.
Doppelklicken Sie auf den umbenannten Übergang Guess Correct im Workflow-Designer, um ihn aufzuklappen.
Ziehen Sie eine ReadInt-Aktivität aus dem Abschnitt NumberGuessWorkflowActivities der Toolbox, und legen Sie sie im Abschnitt Trigger des Übergangs ab.
Geben Sie im Eigenschaftenfenster der ReadInt-Aktivität
"EnterGuess"
einschließlich der Anführungszeichen im Feld mit dem Eigenschaftswert BookmarkName undGuess
im Feld mit dem Eigenschaftswert Result ein.Geben Sie den folgenden Ausdruck in das Feld mit dem Eigenschaftswert Condition des Übergangs Guess Correct ein.
Guess = Target
Guess == Target
Kehren Sie zur allgemeinen Zustandsautomatenansicht im Workflow-Designer zurück, indem Sie in der Breadcrumb-Anzeige am oberen Rand des Workflow-Designers StateMachine auswählen.
Hinweis
Ein Übergang erfolgt, wenn das Triggerereignis empfangen wird und Condition, falls vorhanden,
True
ergibt. Wenn derGuess
-Wert des Benutzers bei diesem Übergang mit dem zufällig generiertenTarget
übereinstimmt, geht die Steuerung an FinalState über, und der Workflow wird abgeschlossen.Abhängig davon, ob die Schätzung richtig ist, sollte der Workflow entweder in den Zustand FinalState oder zurück in den Zustand Enter Guess übergehen, damit ein neuer Versuch erfolgen kann. Beide Übergänge verwenden den gleichen Trigger, d. h., es wird gewartet, bis die Schätzung des Benutzers über die ReadInt-Aktivität empfangen wird. Dies wird als gemeinsamer Übergang bezeichnet. Um einen gemeinsamen Übergang zu erstellen, klicken Sie auf den Kreis, der den Anfang des Zustands Guess Correct darstellt, und ziehen Sie ihn auf den gewünschten Zustand. Da der Übergang in diesem Fall ein Selbstübergang ist, ziehen Sie den Startpunkt des Übergangs Guess Correct und legen diesen wieder auf dem unteren Bereich des Zustands Enter Guess ab. Nachdem Sie den Übergang erstellt haben, wählen Sie ihn im Workflow-Designer aus, und legen dessen DisplayName-Eigenschaft auf Guess Incorrect fest.
Hinweis
Gemeinsame Übergänge können auch innerhalb des Übergangs-Designers erstellt werden, indem Sie im unteren Bereich des Übergangs-Designers auf Gemeinsamen Triggerübergang hinzufügen klicken und dann den gewünschten Zielzustand aus der Dropdownliste Verfügbare Zustände für Verbindung auswählen.
Hinweis
Wenn die Condition-Aktivität eines Übergangs mit
false
ausgewertet wird (oder alle Bedingungen eines Übergangs mit freigegebenem Trigger mitfalse
ausgewertet werden), erfolgt der Übergang nicht, und die Trigger aller Übergänge aus dem Zustand werden neu geplant. In diesem Lernprogramm kann diese Situation aufgrund der Konfigurationsmethode für die Bedingungen (es gibt spezielle Aktionen für richtige oder falsche Schätzungen) nicht auftreten.Doppelklicken Sie im Workflow-Designer auf den Übergang Guess Incorrect, um ihn aufzuklappen. Beachten Sie, dass Trigger bereits auf dieselbe ReadInt-Aktivität festgelegt ist, die auch vom Übergang Guess Correct verwendet wurde.
Geben Sie den folgenden Ausdruck im Feld mit dem Eigenschaftswert Condition ein.
Guess <> Target
Guess != Target
Ziehen Sie eine If-Aktivität aus dem Abschnitt Ablaufsteuerung der Toolbox, und legen Sie sie im Abschnitt Action des Übergangs ab.
Geben Sie den folgenden Ausdruck in das Feld mit dem Eigenschaftswert Condition der If-Aktivität ein.
Guess < Target
Ziehen Sie zwei WriteLine-Aktivitäten aus dem Abschnitt Primitives der Toolbox, und legen Sie eine im Abschnitt Then und die andere im Abschnitt Else der If-Aktivität ab.
Klicken Sie im Abschnitt Then auf die WriteLine-Aktivität, um sie auszuwählen, und geben Sie den folgenden Ausdruck im Feld mit dem Eigenschaftswert Text ein.
"Your guess is too low."
Klicken Sie im Abschnitt Else auf die WriteLine-Aktivität, um sie auszuwählen, und geben Sie den folgenden Ausdruck im Feld mit dem Eigenschaftswert Text ein.
"Your guess is too high."
Kehren Sie zur allgemeinen Zustandsautomatenansicht im Workflow-Designer zurück, indem Sie in der Breadcrumb-Anzeige am oberen Rand des Workflow-Designers StateMachine auswählen.
Im folgenden Beispiel wird der abgeschlossene Workflow dargestellt.
So erstellen Sie den Workflow
Drücken Sie STRG+UMSCH+B, um die Lösung zu erstellen.
Informationen zum Ausführen des Workflows finden Sie im nächsten Thema, Vorgehensweise: Ausführen eines Workflows. Wenn Sie den Schritt Vorgehensweise: Ausführen eines Workflows bereits mit einem anderen Workflowstil ausgeführt haben und ihn mit dem Zustandsautomatworkflow aus diesem Schritt ausführen möchten, wechseln Sie direkt zum Abschnitt So erstellen und führen Sie die Anwendung aus unter Vorgehensweise: Ausführen eines Workflows.