Como: criar um fluxo de trabalho da máquina de estado
Os fluxos de trabalho podem ser construídos a partir de atividades internas assim como as atividades personalizadas. As etapas deste tópico mostram como criar um fluxo de trabalho que usa tanto as atividades internas (como a atividade StateMachine) quanto as atividades personalizadas do tópico anterior, Como criar uma atividade. O fluxo de trabalho modela um jogo de palpite de número.
Observação
Cada tópico do tutorial de Introdução depende dos tópicos anteriores. Para concluir este tópico, primeiro você deve concluir Como criar uma atividade.
Para criar o fluxo de trabalho
Clique com o botão direito em NumberGuessWorkflowActivities no Gerenciador de Soluções e selecione Adicionar, Novo Item.
No nó Instalado, Itens Comuns, 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 Máquina de Estado da Caixa de Ferramentas e solte-a no rótulo Solte a atividade aqui na superfície de design do fluxo de trabalho.
Para criar as variáveis e os 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 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 Dentro na lista suspensa Direção, selecione Int32 na lista suspensa Tipo de argumento e, em seguida, pressione ENTER para salvar o argumento.Clique em Criar Argumento.
Digite
Turns
na caixa Nome 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 atividade 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.
Dica
Se nenhuma caixa Criar Variável for exibida, clique na atividade StateMachine na superfície de design do 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 atividade para fechar o painel Variáveis.
Para adicionar as atividades de fluxo de trabalho
Clique em State1 para selecioná-lo. Na Janela de Propriedades, altere DisplayName para
Initialize Target
.Dica
Se a janela Propriedades não abrir, selecione a Janela Propriedades no menu Exibir.
Clique duas vezes no estado Inicializar Destino recém-renomeado 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 expressão a seguir na caixa Inserir uma expressão C# ou Inserir uma expressão VB.New System.Random().Next(1, MaxNumber + 1)
new System.Random().Next(1, MaxNumber + 1)
Dica
Se a janela da Caixa de Ferramentas não abrir, 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 Estado da seção Máquina de Estado da Caixa de Ferramentas para o designer de fluxo de trabalho e focalize o estado Inicializar Destino. Observe que quatro triângulos aparecerão em torno 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 o DisplayName para
Enter Guess
e 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 propriedades de Texto de 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-a na seção Sair do estado.
Digite
Turns
na caixa Para eTurns + 1
na caixa Inserir uma expressão C# ou Inserir 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 de Máquina de Estado da Caixa de Ferramentas, focalize-a sobre o estado Inserir Palpite e solte-a no triângulo que aparece à direita do estado Inserir Palpite para que uma transição seja criada entre Inserir Palpite e FinalState.
O nome padrão da transição é T2. Clique na transição no designer de fluxo de trabalho para selecioná-lo e defina seu DisplayName como Palpite Correto. Clique e selecione FinalState e arraste-o para a direita de modo que haja um 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 Palpite Correto recém-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 de Propriedades para a atividade ReadInt, digite
"EnterGuess"
, incluindo as aspas, na caixa do valor da propriedade BookmarkName, eGuess
na caixa do valor da propriedade de ResultadoDigite a seguinte expressão na caixa do valor da propriedade Condição da transição Palpite Correto.
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.
Observação
Uma transição ocorre quando o evento de gatilho é recebido e o Condition, se houver, é avaliado como
True
. Para essa transição, se oGuess
do usuário corresponder aoTarget
gerado aleatoriamente, o controle passará para FinalState e o fluxo de trabalho será concluído.Dependendo de o palpite estar correto, o fluxo de trabalho deverá fazer a transição para o FinalState ou voltar para o estado Inserir Palpite para outra tentativa. Ambas as transições compartilham o mesmo gatilho de esperar o palpite do usuário ser recebido pela atividade ReadInt. Isso é chamado de uma transição compartilhada. Para criar uma transição compartilhada, clique no círculo que indica o início da transição Palpite Correto e arraste-o para o estado desejado. Nesse caso, a transição é automática, portanto arraste o ponto inicial da transição de Palpite Correto e solte-o na parte inferior do estado Inserir Palpite. Depois de criar a transição, selecione-a no designer de fluxo de trabalho e defina sua propriedade DisplayName como Palpite Incorreto.
Observação
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 selecionando o estado desejado de destino no menu suspenso Estados disponíveis para conexão.
Observação
Observe que se Condition de uma transição for avaliada como
false
(ou todas as condições de uma transição do gatilho compartilhada for avaliada comofalse
), a transição não ocorrerá e todos os gatilhos para todas as transições de estado serão reprogramados. Neste tutorial, essa situação não pode ocorrer devido à maneira como as condições são configuradas (temos ações específicas para se o palpite está correto ou incorreto).Clique duas vezes na transição Palpite Incorreto no designer de fluxo de trabalho para expandi-la. Observe que o Gatilho já está definido para a mesma atividade ReadInt que foi usada pela transição Palpite Correto.
Digite a expressão a seguir na caixa de valor de propriedade Condição.
Guess <> Target
Guess != Target
Arraste uma atividade Se da seção Fluxo de Controle da Caixa de Ferramentas e solte-a na seção Ação da transição.
Digite a expressão a seguir na caixa de valor de propriedade Condição da atividade Se.
Guess < Target
Arraste duas atividades WriteLine da seção Primitivos da Caixa de Ferramentas e solte-as de modo que uma esteja na seção Então da atividade Se e outra esteja na seção Ou então.
Clique na atividade WriteLine na seção Então para selecioná-la e digite a seguinte expressão na caixa do valor da propriedade Texto.
"Your guess is too low."
Clique na atividade WriteLine na seção Então para selecioná-la e digite a seguinte expressão na caixa do valor da propriedade Texto.
"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 compilar o fluxo de trabalho
Pressione CTRL+SHIFT+B para criar a solução.
Para obter instruções sobre como executar o fluxo de trabalho, consulte o seguinte tópico, Como executar um fluxo de trabalho. Se você já tiver concluído a etapa Como executar um fluxo de trabalho com um estilo diferente de fluxo de trabalho e não quiser executá-lo usando o fluxo de trabalho da máquina de estado dessa etapa, pule para a seção Para compilar e executar o aplicativo de Como executar um fluxo de trabalho.