Procedure: Een activiteit maken
Activiteiten zijn de kerneenheid van gedrag in WF. De uitvoeringslogica van een activiteit kan worden geïmplementeerd in beheerde code of kan worden geïmplementeerd met behulp van andere activiteiten. In dit onderwerp ziet u hoe u twee activiteiten maakt. De eerste activiteit is een eenvoudige activiteit die gebruikmaakt van code om de uitvoeringslogica te implementeren. De implementatie van de tweede activiteit wordt gedefinieerd met behulp van andere activiteiten. Deze activiteiten worden gebruikt in de volgende stappen in de zelfstudie.
Het activiteitsbibliotheekproject maken
Open Visual Studio en kies Nieuw>project in het menu Bestand.
Selecteer in het dialoogvenster Nieuw project, onder de categorie Geïnstalleerd, Visual C#>Workflow (of Visual Basic>Workflow).
Notitie
Als u de categorie Werkstroomsjabloon niet ziet, moet u mogelijk het Onderdeel Windows Workflow Foundation van Visual Studio installeren. Kies de koppeling Visual Studio Installer openen aan de linkerkant van het dialoogvenster Nieuw project . Selecteer in Visual Studio Installer het tabblad Afzonderlijke onderdelen . Selecteer vervolgens onder de categorie Ontwikkelingsactiviteiten het onderdeel Windows Workflow Foundation . Kies Wijzigen om het onderdeel te installeren.
Selecteer de projectsjabloon Activiteitsbibliotheek . Typ
NumberGuessWorkflowActivities
het vak Naam en klik op OK.Klik met de rechtermuisknop op Activity1.xaml in Solution Explorer en kies Verwijderen. Klik op OK om te bevestigen.
De ReadInt-activiteit maken
Kies Nieuw item toevoegen in het menu Project .
Selecteer Werkstroom in het knooppunt Geïnstalleerde>algemene items. Selecteer Codeactiviteit in de lijst Werkstroom .
Typ
ReadInt
in het vak Naam en klik vervolgens op Toevoegen.Vervang de bestaande
ReadInt
definitie door de volgende definitie.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
Notitie
De
ReadInt
activiteit is afgeleid van NativeActivity<TResult> in plaats van CodeActivity, wat de standaardwaarde is voor de codeactiviteitssjabloon. CodeActivity<TResult> kan worden gebruikt als de activiteit één resultaat biedt, dat wordt weergegeven via het Result argument, maar CodeActivity<TResult> geen ondersteuning biedt voor het gebruik van bladwijzers, dus NativeActivity<TResult> wordt gebruikt.
De promptactiviteit maken
Druk op Ctrl+Shift+B om het project te bouwen. Door het project te bouwen, kan de
ReadInt
activiteit in dit project worden gebruikt om de aangepaste activiteit te bouwen vanuit deze stap.Kies Nieuw item toevoegen in het menu Project .
Selecteer Werkstroom in het knooppunt Geïnstalleerde>algemene items. Selecteer Activiteit in de lijst Werkstroom .
Typ
Prompt
in het vak Naam en klik vervolgens op Toevoegen.Dubbelklik op Prompt.xaml in Solution Explorer om deze weer te geven in de ontwerpfunctie als deze nog niet wordt weergegeven.
Klik op Argumenten in de linkerbenedenhoek van de activiteitsontwerper om het deelvenster Argumenten weer te geven.
Klik op Argument maken.
Typ
BookmarkName
in het vak Naam , selecteer In in de vervolgkeuzelijst Richting , selecteer Tekenreeks in de vervolgkeuzelijst Argumenttype en druk op Enter om het argument op te slaan.Klik op Argument maken.
Typ
Result
in het vak Naam onder het zojuist toegevoegdeBookmarkName
argument, selecteer Uit in de vervolgkeuzelijst Richting , selecteer Int32 in de vervolgkeuzelijst Argumenttype en druk op Enter.Klik op Argument maken.
Typ
Text
in het vak Naam , selecteer In in de vervolgkeuzelijst Richting , selecteer Tekenreeks in de vervolgkeuzelijst Argumenttype en druk op Enter om het argument op te slaan.Deze drie argumenten zijn gebonden aan de bijbehorende argumenten van de WriteLine en
ReadInt
activiteiten die worden toegevoegd aan dePrompt
activiteit in de volgende stappen.Klik linksonder in de activiteitsontwerper op Argumenten om het deelvenster Argumenten te sluiten.
Sleep een reeksactiviteit uit de sectie Controlestroom van de Werkset en zet deze neer op het neerzetactiviteitlabel van de ontwerpfunctie voor promptactiviteiten .
Tip
Als het werksetvenster niet wordt weergegeven, selecteert u Werkset in het menu Beeld .
Sleep een WriteLine-activiteit uit de sectie Primitieven van de Werkset en zet deze neer op de drop-activiteit hier het label van de reeksactiviteit .
Bind het argument Tekst van de schrijflijnactiviteit aan het tekstargument van de promptactiviteit door
Text
in het venster Eigenschappen een C#-expressie invoeren of typ een VB-expressievak in het venster Eigenschappen en druk twee keer op de Tab-toets. Hiermee wordt het ledenvenster van de IntelliSense-lijst gesloten en wordt de eigenschapswaarde opgeslagen door de selectie van de eigenschap te verplaatsen. Deze eigenschap kan ook worden ingesteld door in de C#-expressie Invoeren te typenText
of een VB-expressievak in te voeren voor de activiteit zelf.Tip
Als het venster Eigenschappen niet wordt weergegeven, selecteert u Het venster Eigenschappen in het menu Beeld .
Sleep een ReadInt-activiteit uit de sectie NumberGuessWorkflowActivities van de Werkset en zet deze neer in de reeksactiviteit , zodat deze de WriteLine-activiteit volgt.
Bind het argument BookmarkName van de ReadInt-activiteit aan het argument BookmarkName van de activiteit Prompt door in het vak Een VB-expressie invoeren rechts van het argument BookmarkName in het venster Eigenschappen te typen
BookmarkName
en vervolgens twee keer op de Tab-toets te drukken om het venster leden van de IntelliSense-lijst te sluiten en de eigenschap op te slaan.Bind het resultaatargument van de ReadInt-activiteit aan het resultaatargument van de promptactiviteit door in het vak Een VB-expressie invoeren rechts van het argument Resultaat in het venster Eigenschappen te typen
Result
en druk vervolgens twee keer op de Tab-toets.Druk op Ctrl+Shift+B om de oplossing te bouwen.
Volgende stappen
Zie de volgende stap in de zelfstudie: Een werkstroom maken voor instructies over het maken van een werkstroom met behulp van deze activiteiten.