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

  1. Öffnen Sie Visual Studio, und wählen Sie im Menü Datei die Option Neu>Projekt aus.

  2. 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.

  3. Wählen Sie die Projektvorlage Aktivitätsbibliothek aus. Geben Sie NumberGuessWorkflowActivities in das Feld Name ein, und klicken Sie dann auf OK.

  4. 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

  1. Wählen Sie im Menü Projekt die Option Neues Element hinzufügen aus.

  2. Wählen Sie im Knoten Installiert>Gemeinsame Elemente die Option Workflow. Wählen Sie in der Liste Workflow die Option Codeaktivität aus.

  3. Geben Sie ReadInt in das Feld Name ein, und klicken Sie dann auf Hinzufügen.

  4. 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

  1. 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.

  2. Wählen Sie im Menü Projekt die Option Neues Element hinzufügen aus.

  3. Wählen Sie im Knoten Installiert>Gemeinsame Elemente die Option Workflow. Wählen Sie Aktivität aus der Liste Workflow aus.

  4. Geben Sie Prompt in das Feld Name ein, und klicken Sie dann auf Hinzufügen.

  5. Doppelklicken Sie im Projektmappen-Explorer auf Prompt.xaml, um die Datei im Designer anzuzeigen, falls dies nicht bereits der Fall ist.

  6. Klicken Sie unten links im Aktivitäts-Designer auf Argumente, um den Bereich Argumente anzuzeigen.

  7. Klicken Sie auf Argument erstellen.

  8. 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.

  9. Klicken Sie auf Argument erstellen.

  10. 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.

  11. Klicken Sie auf Argument erstellen.

  12. 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 der Prompt-Aktivität in den folgenden Schritten hinzugefügt werden.

  13. Klicken Sie unten links im Aktivitäts-Designer auf Argumente, um den Bereich Argumente zu schließen.

  14. 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.

  15. 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.

  16. 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 eingebenText 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ät Text eingeben.

    Tipp

    Wenn das Eigenschaftenfenster nicht angezeigt wird, wählen Sie Eigenschaftenfenster im Menü Ansicht aus.

  17. 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.

  18. 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.

  19. 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.

  20. 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.

Siehe auch