Procedura: creare un'attività

Le attività sono l'unità principale del comportamento in WF. La logica di esecuzione di un'attività può essere implementata nel codice gestito oppure tramite altre attività. In questo argomento viene illustrato come creare due attività. La prima è un'attività semplice che usa il codice per implementare la propria logica di esecuzione. L'implementazione della seconda attività viene definita tramite altre attività. Queste attività vengono usate nei seguenti passaggi dell'esercitazione.

Creare il progetto di libreria di attività

  1. Aprire Visual Studio e scegliere Nuovo>Progetto dal menu File.

  2. Nella finestra di dialogo Nuovo progetto, nella categoria Installato, selezionare il Visual C#>Workflow (o Visual Basic>Workflow).

    Nota

    Se non viene visualizzata la categoria del modello Workflow, potrebbe essere necessario installare il componenteWindows Workflow Foundation di Visual Studio. Fare clic sul collegamento Apri il Programma di installazione di Visual Studio sul lato sinistro della finestra di dialogo Nuovo progetto. Nel Programma di installazione di Visual Studio, selezionare la scheda Singoli componenti. Quindi, nella categoria Attività di sviluppo, selezionare il componente Windows Workflow Foundation. Fare clic su Modifica per installare il componente.

  3. Selezionare il modello di progetto Libreria attività. Digitare NumberGuessWorkflowActivities nella casella Nome e fare clic su OK.

  4. Fare clic con il pulsante destro del mouse su Activity1.xaml in Esplora soluzioni e scegliere Elimina. Fare clic su OK per confermare.

Creare l'attività ReadInt

  1. Scegliere Aggiungi nuovo elemento dal menu Progetto.

  2. Nel nodo Installato>Elementi comuni, selezionare Flusso di lavoro. Selezionare Attività codice dall'elenco Flusso di lavoro.

  3. Digitare ReadInt nella casella Nome e fare clic su Aggiungi.

  4. Sostituire la definizione dell'attività ReadInt esistente con la definizione seguente.

    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
    

    Nota

    L'attività ReadInt deriva da NativeActivity<TResult> anziché CodeActivity, che è l'attività predefinita per il modello di attività codice. L'oggetto CodeActivity<TResult> può essere usato se l'attività fornisce un singolo risultato, che viene esposto tramite l'argomento Result, ma CodeActivity<TResult> non supporta l'uso dei segnalibri, quindi viene usato l'oggetto NativeActivity<TResult>.

Creare l'attività Prompt

  1. Premere Ctrl+Maiusc+B per compilare il progetto. Nella compilazione del progetto, l'attività ReadInt in questo progetto può essere usata per compilare l'attività personalizzata tramite questo passaggio.

  2. Scegliere Aggiungi nuovo elemento dal menu Progetto.

  3. Nel nodo Installato>Elementi comuni, selezionare Flusso di lavoro. Selezionare Attività dall'elenco Flusso di lavoro.

  4. Digitare Prompt nella casella Nome e fare clic su Aggiungi.

  5. Fare doppio clic su Prompt.xaml in Esplora soluzioni per visualizzarlo nella finestra di progettazione nel caso non sia già visibile.

  6. Fare clic su Argomenti nel riquadro inferiore sinistro dell'area di progettazione dell'attività per visualizzare il riquadro Argomenti.

  7. Fare clic su Crea argomento.

  8. Digitare BookmarkName nella casella Nome, selezionare In dall'elenco a discesa Direzione, quindi selezionareStringa dall'elenco a discesa Tipo di argomento e poi premere Invio per salvare l'argomento.

  9. Fare clic su Crea argomento.

  10. Digitare Result nella casella Nome che si trova sotto l'argomento BookmarkName appena aggiunto, selezionare Out dall'elenco a discesa Direzione, selezionare Int32 dall'elenco a discesa Tipo di argomento, e poi premere Invio.

  11. Fare clic su Crea argomento.

  12. Digitare Text nella casella Nome, selezionare In dall'elenco a discesa Direzione, quindi selezionareStringa dall'elenco a discesa Tipo di argomento e poi premere Invio per salvare l'argomento.

    Questi tre argomenti vengono associati agli argomenti corrispondenti delle attività WriteLine e ReadInt aggiunte all'attività Prompt nei passaggi seguenti.

  13. Fare clic su Argomenti nel riquadro inferiore sinistro dell'area di progettazione dell'attività per chiudere il riquadro Argomenti.

  14. Trascinare un'attività Sequence dalla sezione Flusso di controllo della Casella degli strumenti e rilasciarla sull'etichetta Rilasciare l'attività della finestra di progettazione dell’attività Prompt.

    Suggerimento

    Se la finestra Casella degli strumenti non è visualizzata, selezionare Casella degli strumenti dal menu Visualizza.

  15. Trascinare un'attività WriteLine dalla sezione Primitive della Casella degli strumenti e rilasciarla sull'etichetta Rilasciare l'attività dell'attività Sequence.

  16. Associare l'argomento Text dell'attività WriteLine all'argomento Text dell'attività Prompt digitando Text nella casella Immettere un'espressione C# o Immettere un'espressione VB nella finestra Proprietà, quindi premere il tasto TAB due volte. Ciò consente di chiudere la finestra dei membri dell'elenco IntelliSense e salva il valore della proprietà spostando la selezione dalla proprietà. Questa proprietà può essere impostata anche digitando Text nella casella Immettere un'espressione C# o Immettere un'espressione VB nell'attività stessa.

    Suggerimento

    Se la finestra Proprietà non è visualizzata, selezionare Finestra Proprietà dal menu Visualizza.

  17. Trascinare un'attività ReadInt dalla sezione NumberGuessWorkflowActivities della Casella degli strumenti e rilasciarla nell'attività Sequence in modo che segua l'attività WriteLine.

  18. Associare l'argomento BookmarkName dell'attività ReadInt all'argomento BookmarkName dell'attività Prompt digitando BookmarkName nella casella Immettere un'espressione VB a destra dell'argomento BookmarkName nella Finestra Proprietà, quindi premere il tasto TAB due volte per chiudere la finestra dei membri dell'elenco di IntelliSense e salvare la proprietà.

  19. Associare l'argomento Result dell'attività ReadInt all'argomento Result dell'attività Prompt digitando Result nella casella Immettere un'espressione VB a destra dell'argomento Result nella Finestra Proprietà, quindi premere il tasto TAB due volte.

  20. Premere CTRL+MAIUSC+B per compilare la soluzione.

Passaggi successivi

Per istruzioni su come creare un flusso di lavoro tramite queste attività, vedere il passaggio successivo nell'esercitazione, Procedura: Creare un flusso di lavoro.

Vedi anche