Share via


Definire e usare delegati di attività in Progettazione flussi di lavoro

.NET Framework 4.5 include una finestra di progettazione predefinita per l'attività InvokeDelegate . Questa finestra di progettazione può essere usata per assegnare i delegati all'attività che derivano da ActivityDelegate, come ActivityAction o ActivityFunc<TResult>.

Definire un delegato dell'attività

  1. Creare un nuovo progetto applicazione console flusso di lavoro.

    Nota

    Se non vengono visualizzati i modelli di progetto flusso di lavoro , installare prima di tutto il componente Windows Workflow Foundation di Visual Studio. Per istruzioni dettagliate, vedere Installare Windows Workflow Foundation.

  2. Fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni e scegliere Aggiungi>nuovo elemento. Selezionare la categoria Flusso di lavoro e quindi selezionare il modello Elemento attività . Denominare la nuova attività MyForEach.xaml e quindi selezionare OK.

    L'attività viene aperta nella finestra di progettazione del flusso di lavoro.

  3. In Progettazione flussi di lavoro fare clic sulla scheda Argomenti .

  4. Fare clic su Crea argomento. Denominare il nuovo argomento Items.

  5. Nella colonna Tipo di argomento selezionare Matrice di [T].

  6. Nel browser dei tipi selezionare Oggetto e quindi ok.

  7. Fare di nuovo clic su Crea argomento . Assegnare al nuovo argomento il nome Body. Nella colonna Direzione del nuovo argomento selezionare Proprietà.

  8. Nella colonna Tipo di argomento selezionare Sfoglia per i tipi

  9. Nel browser tipo immettere ActivityAction nel campo Nome tipo. Selezionare ActivityAction<T> nella visualizzazione albero. Selezionare Oggetto nell'elenco a discesa che viene visualizzato per assegnare il tipo ActivityAction<Object> all'argomento.

  10. Trascinare un'attività While dalla sezione Flusso di controllo della casella degli strumenti all'area di progettazione.

  11. Selezionare l'attività While e selezionare la scheda Variabili .

  12. Selezionare Crea variabile. Denominare la nuova variabile Index.

  13. Nella colonna Tipo di variabile selezionare Int32. Lasciare il campo Ambito impostato su While e la colonna Default vuota.

  14. Impostare la proprietà Condition dell'attività sull'indice <WhileItems.Length;.

  15. Trascinare un'attività InvokeDelegate dalla sezione Primitive della casella degli strumenti al corpo dell'attività While.

  16. Selezionare Corpo nell'elenco a discesa delegato.

  17. Nella griglia Proprietà per l'attività InvokeDelegate fare clic sul pulsante ... nella proprietà Argomenti delegati.

  18. Nella colonna Valore dell'argomento denominato Argument immettere Items[Index]. Fare clic su OK per chiudere la finestra di dialogo DelegateArguments .

  19. Trascinare un'attività di Assign sulla riga orizzontale al di sotto dell'attività di InvokeDelegate. L'attività Assign viene creata e viene creata automaticamente un'attività Sequence per contenere le due attività nella sezione Corpo dell'attività MyForEach . La sequenza è necessaria perché la sezione Body può contenere solo una singola attività. La creazione automatica di una nuova Sequence attività è una nuova funzionalità di .NET Framework 4.5.

  20. Impostare la proprietà To dell'attività Assign su index. Impostare la proprietà Value dell'attività Assign su index+1.

    L'attività MyForEach personalizzata richiama un'attività arbitraria una volta per ogni valore passato attraverso l'insieme Items, con i valori nella raccolta come input per l'attività.

Usare l'attività personalizzata in un flusso di lavoro

  1. Compilare il progetto premendo CTRL+MAIUSC+B.

  2. In Esplora soluzioni aprire Workflow1.xaml nella finestra di progettazione.

  3. Trascinare un'attività MyForEach dalla casella degli strumenti all'area di progettazione. L'attività si trova in una sezione della casella degli strumenti con lo stesso nome del progetto.

  4. Impostare la proprietà Items dell'attività MyForEach su new Object[] {1, "abc"}.

  5. Trascinare un'attività WriteLine dalla sezione Primitive della casella degli strumenti alla sezione Delegate:Body dell'attività MyForEach.

  6. Impostare la proprietà Text dell'attività WriteLine su Argument.ToString().

Quando viene eseguito il flusso di lavoro, la console mostra l'output seguente:

1abc