Condividi tramite


Flussi di lavoro della macchina a stati

Una macchina a stati è un paradigma noto per lo sviluppo di programmi. L'attività StateMachine, insieme a State, Transition e altre attività, può essere usata per sviluppare programmi di workflow di macchine a stati. Questo argomento offre una panoramica della creazione di flussi di lavoro della macchina a stati.

Panoramica del flusso di lavoro della macchina a stati

I flussi di lavoro delle macchine a stati forniscono uno stile di modellazione con cui è possibile modellare il flusso di lavoro in modo guidato dagli eventi. Un'attività StateMachine contiene gli stati e le transizioni che costituiscono la logica della macchina a stati e possono essere usate ovunque sia possibile usare un'attività. Esistono diverse classi nel runtime della macchina a stati:

Per creare un flusso di lavoro della macchina a stati, gli stati vengono aggiunti a un'attività StateMachine e le transizioni vengono usate per controllare il flusso tra gli stati. Lo screenshot seguente, dal passaggio Esercitazione introduttivaProcedura: Creare un flusso di lavoro della macchina a stati, mostra un flusso di lavoro della macchina a stati con tre stati e tre transizioni. Initialize Target è lo stato iniziale e rappresenta il primo stato nel flusso di lavoro. Questa operazione viene designata dalla riga che lo porta dal nodo Start . Lo stato finale nel flusso di lavoro è denominato FinalState e rappresenta il punto in cui viene completato il flusso di lavoro.

Figura che mostra il flusso di lavoro della macchina a stati completato.

Un flusso di lavoro della macchina a stati deve avere uno stato iniziale e almeno uno stato finale. Ogni stato che non è uno stato finale deve avere almeno una transizione. Le sezioni seguenti illustrano la creazione e la configurazione di stati e transizioni.

Creazione e configurazione degli stati

Un State oggetto rappresenta uno stato in cui può trovarsi una macchina a stati. Per aggiungere un oggetto State a un flusso di lavoro, trascinare il designer di attività Stato dalla sezione Macchina a stati della casella degli strumenti e rilasciarlo in un'attività StateMachine nell'area di progettazione del flusso di lavoro di Windows.

Screenshot della sezione Macchina a stati della casella degli strumenti.

Per configurare uno stato come stato iniziale, fare clic con il pulsante destro del mouse sullo stato e scegliere Imposta come stato iniziale. Inoltre, se non esiste uno stato iniziale corrente, lo stato iniziale può essere designato trascinando una riga dal nodo Start nella parte superiore del flusso di lavoro allo stato desiderato. Quando un'attività StateMachine viene trascinata sul designer del flusso di lavoro, viene preconfigurata con uno stato iniziale denominato State1. Un flusso di lavoro della macchina a stati deve avere uno stato iniziale e uno solo.

Uno stato che rappresenta uno stato di terminazione in una macchina a stati è denominato stato finale. Uno stato finale è uno stato con la relativa IsFinal proprietà impostata su true, non ha alcuna Exit attività e non ha transizioni provenienti da essa. Per aggiungere uno stato finale a un flusso di lavoro, trascinare un ActivityDesigner FinalState dalla sezione State Machine della casella degli strumenti e rilasciarlo in un'attività StateMachine sulla superficie del Windows Workflow Designer. Un flusso di lavoro della macchina a stati deve avere almeno uno stato finale.

Configurazione delle azioni di ingresso e uscita

Uno stato può avere un'azione Entry e un'azione Exit. Uno stato configurato come stato finale può avere solo un'azione di immissione. Quando un'istanza del flusso di lavoro entra in uno stato, tutte le attività nell'azione di immissione vengono eseguite. Al termine dell'azione di immissione, vengono pianificati i trigger per le transizioni dello stato. Quando viene confermata una transizione a un altro stato, le attività nell'azione di uscita vengono eseguite, anche se lo stato torna allo stesso stato. Al termine dell'azione di uscita, le attività nell'azione della transizione vengono eseguite e quindi viene eseguita la transizione del nuovo stato e le relative azioni di immissione vengono pianificate.

Annotazioni

Quando si esegue il debug di un flusso di lavoro della macchina a stati, i punti di interruzione possono essere posizionati nell'attività della macchina a stati radice e negli stati all'interno del flusso di lavoro della macchina a stati. I punti di interruzione non possono essere inseriti direttamente nelle transizioni, ma possono essere inseriti in qualsiasi attività contenuta negli stati e nelle transizioni.

Creazione e configurazione delle transizioni

Tutti gli stati devono avere almeno una transizione, ad eccezione di uno stato finale, che potrebbe non avere transizioni. Le transizioni possono essere aggiunte dopo l'aggiunta di uno stato a un flusso di lavoro della macchina a stati oppure possono essere create man mano che lo stato viene eliminato.

Per aggiungere un State e creare una transizione in un singolo passaggio, trascinare un'attività State dalla sezione Macchina a stati del Toolbox e farla scorrere sopra un altro stato nel designer del flusso di lavoro. Quando l'oggetto trascinato State si trova su un altro Stateoggetto , vengono visualizzati quattro triangoli attorno all'altro Stateoggetto . Se l'oggetto State viene rilasciato in uno dei quattro triangoli, viene aggiunto alla macchina a stati e viene creata una transizione dall'origine State alla destinazione State specificata per il rilascio. Per ulteriori informazioni, vedere Designer di attività di transizione.

Per creare una transizione dopo l'aggiunta di uno stato, sono disponibili due opzioni. La prima opzione consiste nel trascinare lo stato dall'area di progettazione del flusso di lavoro e posizionarlo su uno stato esistente e rilasciarlo su uno dei punti di rilascio. È simile al metodo descritto nella sezione precedente. È anche possibile passare il puntatore del mouse sullo stato di origine desiderato e trascinare una riga nello stato di destinazione desiderato.

Annotazioni

Un singolo stato in una macchina a stati può avere fino a 76 transizioni create usando la finestra di progettazione del flusso di lavoro. Il limite per le transizioni per uno stato per i flussi di lavoro creati all'esterno della finestra di progettazione è limitato solo dalle risorse di sistema.

Una transizione può avere un Triggeroggetto , un Conditione un oggetto Action. Una transizione Trigger viene pianificata quando l'azione dello stato di origine della transizione Entry è completata. In genere è un'attività Trigger che attende che si verifichi un determinato tipo di evento, ma può essere qualsiasi attività o nessuna attività. Una volta completata l'attività Trigger, viene valutato Condition, se presente. Se non è presente alcuna Trigger attività, l'oggetto Condition viene valutato immediatamente. Se la condizione restituisce false, la transizione viene annullata e l'attività Trigger per tutte le transizioni dallo stato viene riprogrammata. Se sono presenti altre transizioni che condividono lo stesso stato di origine della transizione corrente, tali Trigger azioni vengono annullate e riprogrammate. Se Condition si valuta come true, o non esiste alcuna condizione, viene eseguita l'azione Exit dello stato di origine e quindi viene eseguita l'azione Action della transizione. Al termine, il Action controllo passa allo stato Target

Le transizioni che condividono un trigger comune sono note come transizioni di trigger condivisi. Ogni transizione in un gruppo di transizioni di trigger condivisi ha lo stesso trigger, ma un Condition e un'azione univoca. Per aggiungere altre azioni a una transizione e creare una transizione condivisa, fare clic sul cerchio che indica l'inizio della transizione desiderata e trascinarlo nello stato desiderato. La nuova transizione condividerà lo stesso trigger della transizione iniziale, ma avrà una condizione e un'azione univoci. È anche possibile creare transizioni condivise dall'interno della finestra di progettazione della transizione facendo clic su Aggiungi transizione trigger condiviso nella parte inferiore della finestra di progettazione della transizione e quindi selezionando lo stato di destinazione desiderato dagli stati disponibili da connettere.

Annotazioni

Nota che se la condizione Condition di una transizione restituisce False (o tutte le condizioni di una transizione con trigger condiviso restituiscono False), la transizione non si verificherà e tutti i trigger per tutte le transizioni dallo stato corrente verranno riprogrammati.

Per ulteriori informazioni sulla creazione di flussi di lavoro della macchina a stati, vedere Procedura: Creare un flusso di lavoro della macchina a stati, Designer Attività StateMachine, Designer Attività Stato, Designer Attività Stato Finale e Designer Attività Transizione.

Terminologia della macchina a stati

Questa sezione definisce il vocabolario della macchina a stati usato in questo argomento.

stato
Unità di base che compone una macchina a stati. Una macchina a stati può trovarsi in uno stato specifico in qualsiasi momento.

Azione di immissione
Un'attività eseguita quando si entra nello stato

Esci dall'azione
Un'attività eseguita quando si esce dallo stato

Transizione
Relazione diretta tra due stati che rappresenta la risposta completa di una macchina a stati a un'occorrenza di un evento di un particolare tipo.

Transizione condivisa
Transizione che condivide uno stato di origine e un trigger con una o più transizioni, ma ha una condizione e un'azione univoci.

Attivatore
Attività di attivazione che determina l'esecuzione di una transizione.

Condizione
Vincolo che deve restituire true dopo che il trigger si verifica per il completamento della transizione.

Azione di transizione
Attività eseguita durante l'esecuzione di una determinata transizione.

Transizione condizionale
Transizione con una condizione esplicita.

Transizione automatica
Transizione che transita da uno stato a se stesso.

Stato iniziale
Stato che rappresenta il punto iniziale della macchina a stati.

Stato finale
Stato che rappresenta il completamento della macchina a stati.

Vedere anche