Udostępnij za pośrednictwem


Instrukcje: Tworzenie działania

Działania to podstawowa jednostka zachowania w programie WF. Logikę wykonywania działania można zaimplementować w kodzie zarządzanym lub zaimplementować za pomocą innych działań. W tym temacie przedstawiono sposób tworzenia dwóch działań. Pierwsze działanie to proste działanie, które używa kodu do implementowania logiki wykonywania. Implementacja drugiego działania jest definiowana przy użyciu innych działań. Te działania są używane w poniższych krokach w samouczku.

Tworzenie projektu biblioteki działań

  1. Otwórz program Visual Studio i wybierz pozycję Nowy>projekt z menu Plik.

  2. W oknie dialogowym Nowy projekt w kategorii Zainstalowane wybierz pozycję Visual C#>Workflow (lub Przepływ pracy języka Visual Basic).>

    Uwaga

    Jeśli nie widzisz kategorii Szablon przepływu pracy , może być konieczne zainstalowanie składnika Windows Workflow Foundation programu Visual Studio. Wybierz link Otwórz Instalator programu Visual Studio po lewej stronie okna dialogowego Nowy projekt. W Instalator programu Visual Studio wybierz kartę Poszczególne składniki. Następnie w kategorii Działania programistyczne wybierz składnik Windows Workflow Foundation. Wybierz pozycję Modyfikuj , aby zainstalować składnik.

  3. Wybierz szablon projektu Biblioteka działań. Wpisz NumberGuessWorkflowActivities w polu Nazwa , a następnie kliknij przycisk OK.

  4. Kliknij prawym przyciskiem myszy plik Activity1.xaml w Eksplorator rozwiązań i wybierz polecenie Usuń. Kliknij przycisk OK , aby potwierdzić.

Tworzenie działania ReadInt

  1. Wybierz pozycję Dodaj nowy element z menu Projekt .

  2. W węźle Zainstalowane>elementy wspólne wybierz pozycję Przepływ pracy. Wybierz pozycję Działanie kodu z listy Przepływ pracy .

  3. Wpisz ReadInt w polu Nazwa , a następnie kliknij przycisk Dodaj.

  4. Zastąp istniejącą ReadInt definicję następującą definicją.

    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 ArgumentException("BookmarkName cannot be an Empty string.",
                    "BookmarkName")
            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
    

    Uwaga

    Działanie ReadInt pochodzi z NativeActivity<TResult> wartości zamiast CodeActivity, która jest domyślną wartością szablonu działania kodu. CodeActivity<TResult> można użyć, jeśli działanie zapewnia pojedynczy wynik, który jest uwidaczniony za pośrednictwem argumentu Result , ale CodeActivity<TResult> nie obsługuje używania zakładek, więc NativeActivity<TResult> jest używany.

Tworzenie działania Monituj

  1. Naciśnij klawisze Ctrl+Shift+B, aby skompilować projekt. Kompilowanie projektu umożliwia ReadInt działanie w tym projekcie do kompilowania niestandardowego działania z tego kroku.

  2. Wybierz pozycję Dodaj nowy element z menu Projekt .

  3. W węźle Zainstalowane>elementy wspólne wybierz pozycję Przepływ pracy. Wybierz pozycję Działanie z listy Przepływ pracy .

  4. Wpisz Prompt w polu Nazwa , a następnie kliknij przycisk Dodaj.

  5. Kliknij dwukrotnie plik Prompt.xaml w Eksplorator rozwiązań, aby wyświetlić go w projektancie, jeśli nie jest jeszcze wyświetlany.

  6. Kliknij pozycję Argumenty w lewym dolnym rogu projektanta działań, aby wyświetlić okienko Argumenty .

  7. Kliknij pozycję Utwórz argument.

  8. Wpisz BookmarkName w polu Nazwa , wybierz pozycję W z listy rozwijanej Kierunek , wybierz pozycję Ciąg z listy rozwijanej Typ argumentu, a następnie naciśnij klawisz Enter , aby zapisać argument.

  9. Kliknij pozycję Utwórz argument.

  10. Wpisz Result w polu Nazwa, które znajduje się poniżej nowo dodanego BookmarkName argumentu, wybierz z listy rozwijanej Kierunek wybierzpozycję Int32 z listy rozwijanej Typ argumentu, a następnie naciśnij klawisz Enter.

  11. Kliknij pozycję Utwórz argument.

  12. Wpisz Text w polu Nazwa , wybierz pozycję W z listy rozwijanej Kierunek , wybierz pozycję Ciąg z listy rozwijanej Typ argumentu, a następnie naciśnij klawisz Enter , aby zapisać argument.

    Te trzy argumenty są powiązane z odpowiednimi argumentami WriteLine działań i ReadInt dodawanych do Prompt działania w poniższych krokach.

  13. Kliknij pozycję Argumenty w lewym dolnym rogu projektanta działań, aby zamknąć okienko Argumenty .

  14. Przeciągnij działanie Sekwencja z sekcji Przepływ sterowania przybornika i upuść je na etykietę Działanie Upuść tutaj projektanta działań Monituj.

    Napiwek

    Jeśli okno Przybornik nie jest wyświetlane, wybierz pozycję Przybornik z menu Widok.

  15. Przeciągnij działanie WriteLine z sekcji Typy pierwotne przybornika i upuść je na etykietę Działanie Upuść w tym miejscu działania Sekwencja.

  16. Powiąż argument Text działania WriteLine z argumentem Text działania Monit, wpisując Textw wyrażeniu Enter a C# lub Wprowadź wyrażenie VB w oknie Właściwości, a następnie naciśnij klawisz Tab dwa razy. Spowoduje to odrzucenie okna elementów członkowskich listy Funkcji IntelliSense i zapisanie wartości właściwości przez przeniesienie zaznaczenia z właściwości. Tę właściwość można również ustawić, wpisując Text w polu Wprowadź wyrażenie języka C# lub Wprowadź wyrażenie VB w samym działaniu.

    Napiwek

    Jeśli okno Właściwości nie jest wyświetlane, wybierz pozycję Okno właściwości z menu Widok.

  17. Przeciągnij działanie ReadInt z sekcji NumberGuessWorkflowActivities przybornika i upuść je w działaniu Sequence, aby było zgodne z działaniem WriteLine.

  18. Powiąż argument BookmarkName działania ReadInt z argumentem BookmarkName działania Monituj, wpisując BookmarkName w polu Wprowadź wyrażenie VB z prawej strony argumentu BookmarkName w oknie Właściwości, a następnie naciśnij klawisz Tab dwa razy, aby zamknąć okno członków listy IntelliSense i zapisać właściwość.

  19. Powiąż argument Result działania ReadInt z argumentem Result działania Monituj, wpisując Result w polu Wprowadź wyrażenie VB po prawej stronie argumentu Wynik w oknie Właściwości, a następnie naciśnij klawisz Tab dwa razy.

  20. Naciśnij klawisze Ctrl+Shift+B, aby skompilować rozwiązanie.

Następne kroki

Aby uzyskać instrukcje dotyczące tworzenia przepływu pracy przy użyciu tych działań, zobacz następny krok w samouczku How to: Create a Workflow (Instrukcje: tworzenie przepływu pracy).

Zobacz też