Como: Criar um fluxo de trabalho de máquina de estado
Os fluxos de trabalho podem ser construídos a partir de atividades internas, bem como de atividades personalizadas. Este tópico descreve a criação de um fluxo de trabalho que usa atividades internas, como a StateMachine atividade, e as atividades personalizadas do tópico anterior Como: Criar uma atividade . O fluxo de trabalho modela um jogo de adivinhação de números.
Nota
Cada tópico no tutorial de Introdução depende dos tópicos anteriores. Para concluir este tópico, você deve primeiro concluir Como: Criar uma atividade.
Para criar o fluxo de trabalho
Clique com o botão direito do mouse em NumberGuessWorkflowActivities no Gerenciador de Soluções e selecione Adicionar, Novo Item.
No nó Itens comuns instalados, selecione Fluxo de trabalho. Selecione Atividade na lista Fluxo de trabalho .
Digite
StateMachineNumberGuessWorkflow
na caixa Nome e clique em Adicionar.Arraste uma atividade StateMachine da seção State Machine da Caixa de Ferramentas e solte-a no rótulo Soltar atividade aqui na superfície de design do fluxo de trabalho.
Para criar as variáveis e argumentos do fluxo de trabalho
Clique duas vezes em StateMachineNumberGuessWorkflow.xaml no Gerenciador de Soluções para exibir o fluxo de trabalho no designer, se ele ainda não estiver exibido.
Clique em Argumentos no lado inferior esquerdo do designer de fluxo de trabalho para exibir o painel Argumentos .
Clique em Criar argumento.
Digite
MaxNumber
na caixa Nome , selecione Em na lista suspensa Direção , selecione Int32 na lista suspensa Tipo de argumento e pressione ENTER para salvar o argumento.Clique em Criar argumento.
Digite
Turns
na caixa Nome que está abaixo do argumento recém-adicionadoMaxNumber
, selecione Fora na lista suspensa Direção , selecione Int32 na lista suspensa Tipo de argumento e pressione ENTER.Clique em Argumentos no lado inferior esquerdo do designer de atividades para fechar o painel Argumentos .
Clique em Variáveis no lado inferior esquerdo do designer de fluxo de trabalho para exibir o painel Variáveis .
Clique em Criar variável.
Gorjeta
Se nenhuma caixa Criar variável for exibida, clique StateMachine na atividade na superfície do designer de fluxo de trabalho para selecioná-la.
Digite
Guess
na caixa Nome , selecione Int32 na lista suspensa Tipo de variável e pressione ENTER para salvar a variável.Clique em Criar variável.
Digite
Target
na caixa Nome , selecione Int32 na lista suspensa Tipo de variável e pressione ENTER para salvar a variável.Clique em Variáveis no lado inferior esquerdo do designer de atividades para fechar o painel Variáveis .
Para adicionar as atividades do fluxo de trabalho
Clique em State1 para selecioná-lo. Na janela Propriedades, altere o DisplayName para
Initialize Target
.Gorjeta
Se a janela Propriedades não for exibida, selecione Janela Propriedades no menu Exibir .
Clique duas vezes no estado recém-renomeado Inicializar Destino no designer de fluxo de trabalho para expandi-lo.
Arraste uma atividade Atribuir da seção Primitivos da Caixa de Ferramentas e solte-a na seção Entrada do estado. Digite
Target
na caixa Para e a seguinte expressão na caixa Digite uma expressão C# ou Digite uma expressão VB.New System.Random().Next(1, MaxNumber + 1)
new System.Random().Next(1, MaxNumber + 1)
Gorjeta
Se a janela Caixa de Ferramentas não for exibida, selecione Caixa de Ferramentas no menu Exibir .
Retorne à exibição geral da máquina de estado no designer de fluxo de trabalho clicando em StateMachine na exibição de trilha na parte superior do designer de fluxo de trabalho.
Arraste uma atividade de Estado da seção Máquina de Estado da Caixa de Ferramentas para o designer de fluxo de trabalho e passe o mouse sobre o estado Inicializar Destino. Observe que quatro triângulos aparecerão ao redor do estado Inicializar destino quando o novo estado estiver sobre ele. Solte o novo estado no triângulo que está imediatamente abaixo do estado Inicializar destino . Isso coloca o novo estado no fluxo de trabalho e cria uma transição do estado Inicializar destino para o novo estado.
Clique em State1 para selecioná-lo, altere DisplayName para
Enter Guess
e, em seguida, clique duas vezes no estado no designer de fluxo de trabalho para expandi-lo.Arraste uma atividade WriteLine da seção Primitivos da Caixa de Ferramentas e solte-a na seção Entrada do estado.
Digite a seguinte expressão na caixa de propriedade Text do WriteLine.
"Please enter a number between 1 and " & MaxNumber
"Please enter a number between 1 and " + MaxNumber
Arraste uma atividade Atribuir da seção Primitivos da Caixa de Ferramentas e solte na seção Sair do estado.
Digite
Turns
na caixa Para eTurns + 1
na caixa Digite uma expressão C# ou Digite uma expressão VB.Retorne à exibição geral da máquina de estado no designer de fluxo de trabalho clicando em StateMachine na exibição de trilha na parte superior do designer de fluxo de trabalho.
Arraste uma atividade FinalState da seção State Machine da Caixa de Ferramentas, passe o mouse sobre o estado Enter Guess e solte-a no triângulo que aparece à direita do estado Enter Guess para que uma transição seja criada entre Enter Guess e FinalState.
O nome padrão da transição é T2. Clique na transição no designer de fluxo de trabalho para selecioná-la e defina seu DisplayName como Guess Correct. Em seguida, clique e selecione o FinalState e arraste-o para a direita para que haja espaço para que o nome completo da transição seja exibido sem sobrepor nenhum dos dois estados. Isso facilitará a conclusão das etapas restantes no tutorial.
Clique duas vezes na transição Adivinhar Correto recentemente renomeada no designer de fluxo de trabalho para expandi-la.
Arraste uma atividade ReadInt da seção NumberGuessWorkflowActivities da Caixa de Ferramentas e solte-a na seção Gatilho da transição.
Na janela Propriedades da atividade ReadInt, digite
"EnterGuess"
incluindo as aspas na caixa Valor da propriedade BookmarkName e digiteGuess
na caixa Valor da propriedade ResultDigite a seguinte expressão na caixa Valor da propriedade Condition da transição Guess Correct.
Guess = Target
Guess == Target
Retorne à exibição geral da máquina de estado no designer de fluxo de trabalho clicando em StateMachine na exibição de trilha na parte superior do designer de fluxo de trabalho.
Nota
Uma transição ocorre quando o evento gatilho é recebido e o Condition, se presente, é avaliado como
True
. Para essa transição, se o usuárioGuess
corresponder ao geradoTarget
aleatoriamente, o controle passa para o FinalState e o fluxo de trabalho é concluído.Dependendo se a suposição está correta, o fluxo de trabalho deve fazer a transição para o FinalState ou voltar para o estado Enter Guess para outra tentativa. Ambas as transições compartilham o mesmo gatilho de esperar que o palpite do usuário seja recebido por meio da atividade ReadInt . Isso é chamado de transição compartilhada. Para criar uma transição compartilhada, clique no círculo que indica o início da transição Adivinhar Correto e arraste-o para o estado desejado. Nesse caso, a transição é uma autotransição, portanto, arraste o ponto inicial da transição Guess Correct e solte-o de volta na parte inferior do estado Enter Guess . Depois de criar a transição, selecione-a no designer de fluxo de trabalho e defina sua propriedade DisplayName como Guess Incorrect.
Nota
As transições compartilhadas também podem ser criadas de dentro do designer de transição clicando em Adicionar transição de gatilho compartilhado na parte inferior do designer de transição e, em seguida, selecionando o estado de destino desejado na lista suspensa Estados disponíveis para conexão.
Nota
Observe que, se o Condition de uma transição for avaliado para
false
(ou todas as condições de uma transição de gatilho compartilhado avaliarem parafalse
), a transição não ocorrerá e todos os gatilhos para todas as transições do estado serão reagendados. Neste tutorial, essa situação não pode acontecer devido à forma como as condições são configuradas (temos ações específicas para saber se o palpite está correto ou incorreto).Clique duas vezes na transição Adivinhar Incorreto no designer de fluxo de trabalho para expandi-la. Observe que o Trigger já está definido para a mesma atividade ReadInt que foi usada pela transição Guess Correct .
Digite a seguinte expressão na caixa Valor da propriedade Condition .
Guess <> Target
Guess != Target
Arraste uma atividade If da seção Fluxo de Controle da Caixa de Ferramentas e solte-a na seção Ação da transição.
Digite a seguinte expressão na caixa Valor da propriedade Condition da atividade If.
Guess < Target
Arraste duas atividades WriteLine da seção Primitivos da Caixa de Ferramentas e solte-as para que uma esteja na seção Then da atividade If e uma na seção Else .
Clique na atividade WriteLine na seção Then para selecioná-la e digite a seguinte expressão na caixa Valor da propriedade Text .
"Your guess is too low."
Clique na atividade WriteLine na seção Else para selecioná-la e digite a seguinte expressão na caixa Valor da propriedade Text .
"Your guess is too high."
Retorne à exibição geral da máquina de estado no designer de fluxo de trabalho clicando em StateMachine na exibição de trilha na parte superior do designer de fluxo de trabalho.
O exemplo a seguir ilustra o fluxo de trabalho concluído.
Para criar o fluxo de trabalho
Prima CTRL+SHIFT+B para compilar a solução.
Para obter instruções sobre como executar o fluxo de trabalho, consulte o próximo tópico, Como executar um fluxo de trabalho. Se você já concluiu a etapa Como: Executar um fluxo de trabalho com um estilo diferente de fluxo de trabalho e deseja executá-lo usando o fluxo de trabalho da máquina de estado desta etapa, pule para a seção Para criar e executar o aplicativo de Como: Executar um fluxo de trabalho.