Dela via


Gör så här: Skapa en aktivitet

Aktiviteter är den viktigaste beteendeenheten i WF. Körningslogik för en aktivitet kan implementeras i hanterad kod eller implementeras med hjälp av andra aktiviteter. Det här avsnittet visar hur du skapar två aktiviteter. Den första aktiviteten är en enkel aktivitet som använder kod för att implementera sin körningslogik. Implementeringen av den andra aktiviteten definieras med hjälp av andra aktiviteter. Dessa aktiviteter används i följande steg i självstudien.

Skapa aktivitetsbiblioteksprojektet

  1. Öppna Visual Studio och välj Nytt>projektmenyn Arkiv .

  2. I dialogrutan Nytt projekt går du till kategorin Installerad och väljer Visual C#>Workflow (eller Visual Basic>Workflow).

    Kommentar

    Om du inte ser kategorin Arbetsflödesmall kan du behöva installera Komponenten Windows Workflow Foundation i Visual Studio. Välj länken Öppna Visual Studio Installer till vänster i dialogrutan Nytt projekt. I Visual Studio Installer väljer du fliken Enskilda komponenter . Under kategorin Utvecklingsaktiviteter väljer du sedan komponenten Windows Workflow Foundation . Välj Ändra för att installera komponenten.

  3. Välj projektmallen Aktivitetsbibliotek . Skriv NumberGuessWorkflowActivities i rutan Namn och klicka sedan på OK.

  4. Högerklicka på Activity1.xaml i Solution Explorer och välj Ta bort. Bekräfta genom att klicka på OK .

Skapa ReadInt-aktiviteten

  1. Välj Lägg till nytt objektProjekt-menyn .

  2. I noden Installerade>vanliga objekt väljer du Arbetsflöde. Välj Kodaktivitet i listan Arbetsflöde .

  3. Skriv ReadInt i rutan Namn och klicka sedan på Lägg till.

  4. Ersätt den befintliga ReadInt definitionen med följande 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
    

    Kommentar

    Aktiviteten ReadInt härleds från NativeActivity<TResult> i stället för CodeActivity, vilket är standardvärdet för kodaktivitetsmallen. CodeActivity<TResult> kan användas om aktiviteten ger ett enda resultat, som exponeras via Result argumentet, men CodeActivity<TResult> inte stöder användning av bokmärken, så NativeActivity<TResult> används.

Skapa promptaktiviteten

  1. Tryck på Ctrl+Skift+B för att skapa projektet. Genom att skapa projektet kan ReadInt aktiviteten i det här projektet användas för att skapa den anpassade aktiviteten från det här steget.

  2. Välj Lägg till nytt objektProjekt-menyn .

  3. I noden Installerade>vanliga objekt väljer du Arbetsflöde. Välj Aktivitet i arbetsflödeslistan.

  4. Skriv Prompt i rutan Namn och klicka sedan på Lägg till.

  5. Dubbelklicka på Prompt.xaml i Solution Explorer för att visa den i designern om den inte redan visas.

  6. Klicka på Argument längst ned till vänster i aktivitetsdesignern för att visa fönstret Argument .

  7. Klicka på Skapa argument.

  8. Skriv BookmarkName i rutan Namn , välj In i listrutan Riktning , välj Sträng i listrutan Argumenttyp och tryck sedan på Retur för att spara argumentet.

  9. Klicka på Skapa argument.

  10. Skriv Result i rutan Namn som finns under det nyligen tillagda BookmarkName argumentet, välj Ut i listrutan Riktning , välj Int32 i listrutan Argumenttyp och tryck sedan på Retur.

  11. Klicka på Skapa argument.

  12. Skriv Text i rutan Namn , välj In i listrutan Riktning , välj Sträng i listrutan Argumenttyp och tryck sedan på Retur för att spara argumentet.

    Dessa tre argument är bundna till motsvarande argument för de WriteLine aktiviteter och ReadInt som läggs till i Prompt aktiviteten i följande steg.

  13. Klicka på Argument längst ned till vänster i aktivitetsdesignern för att stänga fönstret Argument .

  14. Dra en sekvensaktivitet från avsnittet Kontrollflöde i verktygslådan och släpp den på etiketten Släpp aktivitet här i aktivitetsdesignern Fråga.

    Dricks

    Om fönstret Verktygslåda inte visas väljer du Verktygslådamenyn Visa .

  15. Dra en WriteLine-aktivitet från avsnittet Primitiver i verktygslådan och släpp den på etiketten Släpp aktivitet här för sekvensaktiviteten.

  16. Binda textargumentet för aktiviteten WriteLine till argumentet Text i aktiviteten Fråga genom att Text skriva in uttrycket Enter a C# eller Enter a VB expression (Ange ett VB-uttryck) i fönstret Egenskaper och tryck sedan på tabbtangenten två gånger. Detta stänger fönstret IntelliSense-listmedlemmar och sparar egenskapsvärdet genom att flytta markeringen från egenskapen. Den här egenskapen kan också anges genom att Text skriva i rutan Ange ett C#-uttryck eller Ange ett VB-uttryck i själva aktiviteten.

    Dricks

    Om fönstret Egenskaper inte visas väljer du Egenskapsfönstermenyn Visa .

  17. Dra en ReadInt-aktivitet från avsnittet NumberGuessWorkflowActivities i verktygslådan och släpp den i sekvensaktiviteten så att den följer writeline-aktiviteten.

  18. Binda argumentet BookmarkName för ReadInt-aktiviteten till argumentet BookmarkName för aktiviteten Prompt genom att BookmarkName skriva i rutan Ange ett VB-uttryck till höger om argumentet BookmarkName i egenskapsfönstret och tryck sedan på tabbtangenten två gånger för att stänga fönstret MedlliSense-listmedlemmar och spara egenskapen.

  19. Binda argumentet Resultat för ReadInt-aktiviteten till argumentet Resultat för aktiviteten Fråga genom att Result skriva i rutan Ange ett VB-uttryck till höger om argumentet Resultat i fönstret Egenskaper och tryck sedan på tabbtangenten två gånger.

  20. Tryck på Ctrl+Skift+B för att skapa lösningen.

Nästa steg

Anvisningar om hur du skapar ett arbetsflöde med hjälp av dessa aktiviteter finns i nästa steg i självstudien How to: Create a Workflow (Så här skapar du ett arbetsflöde).

Se även