Condividi tramite


Flussi di lavoro macchina a stati

Una macchina a stati è un paradigma noto per lo sviluppo di programmi. L'attività StateMachine può essere usata insieme all'oggetto State, Transition e ad altre attività per compilare programmi del flusso di lavoro macchina a stati. In questo argomento viene fornita una panoramica sulla creazione dei flussi di lavoro macchina a stati.

Panoramica sul flusso di lavoro macchina a stati

I flussi di lavoro macchina a stati forniscono uno stile di modellazione con cui è possibile modellare il flusso di lavoro come se fosse basato sugli eventi. Un'attività StateMachine contiene gli stati e le transizioni che costituiscono la logica della macchina a stati e può essere usata ovunque ne sia possibile l'applicazione. Sono disponibili 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 Procedura: creare un flusso di lavoro della macchina a stati dell'Esercitazione introduttiva, 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. È indicato dalla linea che porta a quest'ultimo dal nodo Start. Lo stato finale nel flusso di lavoro è denominato FinalState e rappresenta il punto in corrispondenza del quale il flusso di lavoro viene completato.

Illustration that shows the completed state machine workflow.

In un flusso di lavoro macchina a stati deve essere disponibile un unico stato iniziale e almeno uno stato finale. Ogni stato che non è finale deve disporre di almeno una transizione. Le sezioni seguenti riguardano la creazione e la configurazione degli stati e delle transizioni.

Creazione e configurazione degli stati

Un oggetto State rappresenta uno stato in cui può trovarsi una macchina a stati. Per aggiungere un oggetto State a un flusso di lavoro, trascinare l'ActivityDesigner Stato dalla sezione Macchina a stati della Casella degli strumenti e rilasciarlo su un'attività StateMachine nell'area di Progettazione flussi di lavoro di Windows.

Screenshot of the State Machine section of the Toolbox.

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 vi è uno stato iniziale corrente, è possibile designarne uno tracciando una linea dal nodo Start, nella parte superiore del flusso di lavoro, allo stato desiderato. Quando un'attività StateMachine viene rilasciata nella finestra di progettazione flussi di lavoro, viene preconfigurata con uno stato iniziale denominato State1. In un flusso di lavoro macchina a stati deve essere disponibile un unico stato iniziale.

Uno stato che rappresenta quello di chiusura in una macchina a stati è denominato stato finale. Uno stato finale è uno stato la cui relativa proprietà IsFinal è impostata su true, è privo di attività Exit e non presenta alcuna transizione che abbia origine da esso. Per aggiungere uno stato finale a un flusso di lavoro, trascinare un ActivityDesigner FinalState dalla sezione Macchina a stati della Casella degli strumenti e rilasciarlo su un'attività StateMachine nell'area di Progettazione flussi di lavoro di Windows. Un flusso di lavoro macchina a stati deve disporre di almeno uno stato finale.

Configurazione delle azioni di ingresso e di uscita

Uno stato può disporre di un'azione Entry e di una Exit. Uno stato configurato come finale può disporre solo di un'azione di ingresso. Quando un'istanza del flusso di lavoro passa a uno stato, tutte le attività nell'azione in ingresso vengono eseguite. Dopo il completamento dell'azione di ingresso, i trigger per le transizioni dello stato vengono pianificati. Quando una transizione a un altro stato viene confermata, le attività nell'azione di uscita vengono eseguite, anche se le transizioni di stato tornano allo stesso stato. Al termine dell'azione di uscita, vengono eseguite le attività nell'azione della transizione, quindi si passa al nuovo stato e le relative azioni di ingresso vengono pianificate.

Nota

Durante il debug di un flusso di lavoro macchina a stati, i punti di interruzione possono essere inseriti nell'attività e negli stati della macchina a stati radice all'interno del flusso di lavoro della macchina a stati. È possibile che i punti di interruzione non siano inseriti direttamente nelle transizioni, bensì in tutte le attività contenute all'interno degli stati e delle transizioni.

Creazione e configurazione delle transizioni

Tutti gli stati devono avere almeno una transizione, ad eccezione di uno stato finale che può non avere transizioni. Le transizioni possono essere aggiunte dopo l'aggiunta di uno stato al flusso di lavoro macchina a stati. In alternativa, possono essere create quando lo stato viene rilasciato.

Per aggiungere un oggetto State e creare una transizione in un passaggio, trascinare un'attività Stato dalla sezione Macchina a stati della Casella degli strumenti e passarla su un altro stato nella finestra di progettazione flussi di lavoro. Quando l'oggetto State trascinato si trova su un altro oggetto State, intorno a State verranno visualizzati quattro triangoli. Se l'oggetto State viene rilasciato su uno dei quattro triangoli, viene aggiunto alla macchina a stati e una transizione viene creata dall'oggetto State di origine all'oggetto State di destinazione rilasciato. Per altre informazioni, vedere ActivityDesigner Transition.

Per creare una transizione dopo l'aggiunta di uno stato sono disponibili due opzioni. La prima consiste nel trascinare lo stato dall'area di progettazione del flusso di lavoro, passarlo su uno stato esistente, quindi rilasciarlo su uno dei punti di trascinamento. Questa operazione è simile al metodo descritto nella sezione precedente. È inoltre possibile passare il mouse sullo stato di origine desiderato e tracciare una linea allo stato di destinazione scelto.

Nota

Un singolo stato in una macchina a stati può essere composto da un massimo di 76 transizioni create mediante la finestra di progettazione flussi di lavoro. Il limite alle transizioni per uno stato per i flussi di lavoro creati all'esterno della finestra di progettazione è stabilito solo dalle risorse di sistema.

Una transizione può disporre delle proprietà Trigger, Condition e Action. La proprietà Trigger di una transizione viene pianificata al completamento dell'azione Entry dello stato di origine della transizione. In genere, la proprietà Trigger è un'attività in attesa del verificarsi di alcuni tipi di evento, ma può trattarsi di una qualsiasi attività o di nessuna attività. Una volta completata l'attività Trigger, la proprietà Condition, se presente, viene valutata. Se non è disponibile alcuna attività Trigger, viene valutata immediatamente la proprietà Condition. Se la condizione restituisce false, la transizione viene annullata e l'attività Trigger per tutte le transizioni dallo stato viene ripianificata. Se vi sono altre transizioni che condividono lo stesso stato di origine della transizione corrente, anche quelle azioni Trigger vengono annullate e ripianificate. Se la proprietà Condition restituisce true, o non esiste alcuna condizione, viene eseguita l'azione Exit dello stato di origine, quindi viene eseguita la proprietà Action della transizione. Quando Action viene completata, il controllo passa allo stato Target.

Le transizioni che condividono un trigger comune sono note come transizioni del trigger condivise. Ogni transizione in un gruppo di transizioni del trigger condivise ha lo stesso trigger, ma una proprietà Condition e un'azione univoche. 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à uno stesso trigger della transizione iniziale, ma avrà una condizione e un'azione univoche. Le transizioni condivise possono essere create anche dalla finestra di progettazione della transizione facendo clic su Aggiungi transizione del trigger condivisa nella parte inferiore della finestra di progettazione della transizione e selezionando lo stato di destinazione desiderato dall'elenco a discesa Stati disponibili per la connessione.

Nota

Si noti che se Condition di una transizione restituisce False (o tutti gli stati di una transizione trigger condivisa restituiscono False), la transizione non si verificherà e tutti i trigger per tutte le transizioni dallo stato verranno rinviati.

Per altre informazioni sulla creazione di flussi di lavoro della macchina a stati, vedere Procedura: creare un flusso di lavoro della macchina a stati, ActivityDesigner StateMachine, ActivityDesigner State, ActivityDesigner FinalState e ActivityDesigner Transition.

Terminologia della macchina a stati

Contenuto della sezione viene definito il vocabolario della macchina a stati usato in questo argomento.

Provincia
L'unità di base che costituisce una macchina a stati. Una macchina a stati può trovarsi in uno stato in qualsiasi momento particolare.

Azione di ingresso
Un'attività eseguita quando si passa a uno stato.

Azione di uscita
Un'attività eseguita quando si esce da uno stato.

Transizione
Una relazione diretta tra due stati che rappresenta la risposta completa di una macchina a stati al verificarsi di un evento di un determinato tipo.

Transizione condivisa
Una transizione che condivide uno stato e un trigger di origine con una o più transizioni, ma dispone di una condizione e un'azione univoche.

Trigger
Un'attività di trigger che genera una transizione.

Condizione
Un vincolo che deve restituire true dopo l'attivazione del trigger affinché la transizione venga completata.

Azione di transizione
Un'attività che viene eseguita quando si effettua una determinata transizione.

Transizione condizionale
Una transizione con una condizione esplicita.

Transizione autodirezionale
Una transizione che passa da uno stato a se stessa.

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

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

Vedi anche