Как создать рабочий процесс конечного автомата
Рабочие процессы могут создаваться как из встроенных, так и из пользовательских действий. В этом разделе описывается создание рабочего процесса, использующего как встроенные действия, такие как StateMachine действие, так и пользовательские действия из предыдущего раздела: Создание раздела действий . Рабочий процесс моделирует игру по угадыванию числа.
Примечание.
Каждый раздел в учебнике «Приступая к работе» построен на основе предыдущих разделов. Чтобы завершить эту статью, сначала необходимо выполнить инструкции . Создание действия.
Создание рабочего процесса
Щелкните правой кнопкой мыши NumberGuessWorkflowActivities в Обозреватель решений и выберите "Добавить", "Создать элемент".
В узле "Установленные", "Общие элементы" выберите "Рабочий процесс". Выберите действие из списка рабочих процессов .
Введите
StateMachineNumberGuessWorkflow
поле "Имя" и нажмите кнопку "Добавить".Перетащите действие StateMachine из раздела "Компьютер состояния" панели элементов и перетащите его на метку drop здесь на рабочей области конструктора рабочего процесса.
Создание переменных и аргументов рабочего процесса
Дважды щелкните StateMachineNumberGuessWorkflow.xaml в Обозреватель решений, чтобы отобразить рабочий процесс в конструкторе, если он еще не отображается.
Щелкните Аргументы в левой нижней части конструктора рабочих процессов, чтобы отобразить область аргументов .
Нажмите кнопку "Создать аргумент".
Введите
MaxNumber
в поле "Имя", выберите "В" в раскрывающемся списке "Направление", выберите Int32 из раскрывающегося списка "Тип аргумента", а затем нажмите клавишу ВВОД, чтобы сохранить аргумент.Нажмите кнопку "Создать аргумент".
Введите
Turns
в поле "Имя ", которое находится под недавно добавленнымMaxNumber
аргументом, выберите "Вне " в раскрывающемся списке "Направление ", выберите Int32 из раскрывающегося списка "Тип аргумента" и нажмите клавишу ВВОД.Щелкните Аргументы в левой нижней части конструктора действий, чтобы закрыть область аргументов .
Щелкните Переменные в левой нижней части конструктора рабочих процессов, чтобы отобразить панель "Переменные".
Нажмите кнопку "Создать переменную".
Совет
Если поле "Создать переменную" не отображается, щелкните StateMachine действие в области конструктора рабочих процессов, чтобы выбрать его.
Введите
Guess
в поле "Имя", выберите Int32 из раскрывающегося списка типа переменной и нажмите клавишу ВВОД, чтобы сохранить переменную.Нажмите кнопку "Создать переменную".
Введите
Target
в поле "Имя", выберите Int32 из раскрывающегося списка типа переменной и нажмите клавишу ВВОД, чтобы сохранить переменную.Щелкните Переменные в левой нижней части конструктора действий, чтобы закрыть панель "Переменные".
Добавление действий рабочего процесса
Щелкните State1 , чтобы выбрать его. В окне свойств измените значение DisplayName
Initialize Target
на .Совет
Если окно свойств не отображается, выберите окно свойств в меню "Вид".
Дважды щелкните только что переименованное состояние initialize Target в конструкторе рабочих процессов, чтобы развернуть его.
Перетащите действие "Назначение" из раздела "Примитивы" панели элементов и перетащите его в раздел "Запись" состояния. Введите
Target
поле "To " и следующее выражение в поле "Ввод выражения C#" или "Ввод выражения VB".New System.Random().Next(1, MaxNumber + 1)
new System.Random().Next(1, MaxNumber + 1)
Совет
Если окно панели элементов не отображается, выберите панель элементов в меню "Вид".
Вернитесь к общему представлению компьютера состояния в конструкторе рабочих процессов, щелкнув StateMachine в области навигации в верхней части конструктора рабочих процессов.
Перетащите действие состояния из раздела "Компьютер состояния" панели элементов в конструктор рабочих процессов и наведите указатель мыши на состояние инициализации целевого объекта. Обратите внимание, что четыре треугольника будут отображаться вокруг состояния инициализации целевого объекта, когда новое состояние находится над ним. Удалите новое состояние в треугольнике, который непосредственно находится под состоянием инициализации целевого объекта . Это помещает новое состояние в рабочий процесс и создает переход от состояния Initialize Target к новому состоянию.
Щелкните State1 , чтобы выбрать его, измените значение DisplayName
Enter Guess
на, а затем дважды щелкните состояние в конструкторе рабочих процессов, чтобы развернуть его.Перетащите действие WriteLine из раздела "Примитивы" панели элементов и перетащите его в раздел "Запись" состояния.
Введите следующее выражение в текстовое поле свойства WriteLine.
"Please enter a number between 1 and " & MaxNumber
"Please enter a number between 1 and " + MaxNumber
Перетащите действие "Назначение" из раздела "Примитивы" панели элементов и перейдите в раздел "Выход" состояния.
Введите
Turns
поле "To " иTurns + 1
введите выражение C# или введите поле выражения VB.Вернитесь к общему представлению компьютера состояния в конструкторе рабочих процессов, щелкнув StateMachine в области навигации в верхней части конструктора рабочих процессов.
Перетащите действие FinalState из раздела "Компьютер состояния" панели элементов, наведите указатель мыши на состояние ввод угадывание и перетащите его в треугольник, который отображается справа от состояния вводного угадывания, чтобы переход был создан между вводом угадок и FinalState.
Имя перехода по умолчанию — T2. Щелкните переход в конструкторе рабочих процессов, чтобы выбрать его, и задайте для него значение DisplayName значение "Угадать правильно". Затем щелкните и выберите FinalState и перетащите его вправо, чтобы отображалось полное имя перехода без переложения одного из двух состояний. Это позволит упростить выполнение оставшихся действий в учебнике.
Дважды щелкните только что переименованный переход "Угадывание правильно" в конструкторе рабочих процессов, чтобы развернуть его.
Перетащите действие ReadInt из раздела NumberGuessWorkflowActivities панели элементов и удалите его в разделе триггера перехода.
В окне свойств для действия ReadInt введите
"EnterGuess"
кавычки в поле значения свойства BookmarkName и введитеGuess
в поле "Значение свойства Result"Введите следующее выражение в поле "Значение свойства условия "Угадывание правильного перехода".
Guess = Target
Guess == Target
Вернитесь к общему представлению компьютера состояния в конструкторе рабочих процессов, щелкнув StateMachine в области навигации в верхней части конструктора рабочих процессов.
Примечание.
Переход происходит при получении события триггера и оценке Condition значением
True
(если оно присутствует). Для этого перехода, если пользовательGuess
соответствует случайно созданномуTarget
, то элемент управления передается в FinalState и рабочий процесс завершается.В зависимости от того, правильно ли предположение, рабочий процесс должен перейти в FinalState или вернуться к состоянию Ввод угадок для другой попытки. Оба перехода используют один и тот же триггер ожидания получения пользователем предположения через действие ReadInt . Это называется общим переходом. Чтобы создать общий переход, щелкните круг, указывающий начало перехода "Угадывание правильно " и перетащите его в нужное состояние. В этом случае переход является самостоятельным переходом, поэтому перетащите начальную точку перехода "Угадывание правильно " и удалите ее обратно в нижней части состояния вводного угадывание . После создания перехода выберите его в конструкторе рабочих процессов и задайте для свойства DisplayNameзначение "Угадать неправильно".
Примечание.
Общие переходы также можно создать из конструктора переходов, нажав кнопку "Добавить общий триггер" в нижней части конструктора переходов и выбрав требуемое целевое состояние из доступных состояний для подключения раскрывающегося списка.
Примечание.
Обратите внимание, что если состояние Condition перехода оценивается как
false
(или все условия общего перехода триггера оцениваются какfalse
), переход не выполняется, а все триггеры для всех переходов из состояния будут запланированы заново. В этом учебнике такая ситуация невозможна из-за способа настройки условий (имеются определенные действия для случая, если догадка верна или неверна).Дважды щелкните неправильный переход в конструкторе рабочих процессов, чтобы развернуть его. Обратите внимание, что триггер уже установлен на то же действие ReadInt , которое использовалось переходом "Угадывание правильно ".
Введите следующее выражение в поле значения свойства Condition .
Guess <> Target
Guess != Target
Перетащите действие If из раздела потока управления панели элементов и удалите его в разделе "Действие" перехода.
Введите следующее выражение в поле "Значение свойства условия действия".
Guess < Target
Перетащите два действия WriteLine из раздела "Примитивы" панели элементов и удалите их таким образом, чтобы один из них был в разделе "Если" и один находится в разделе Else.
Щелкните действие WriteLine в разделе "Затем", чтобы выбрать его, и введите следующее выражение в поле "Значение свойства text".
"Your guess is too low."
Щелкните действие WriteLine в разделе Else, чтобы выбрать его, и введите следующее выражение в поле значения свойства Text.
"Your guess is too high."
Вернитесь к общему представлению компьютера состояния в конструкторе рабочих процессов, щелкнув StateMachine в области навигации в верхней части конструктора рабочих процессов.
В следующем примере показан завершенный рабочий процесс.
Построение рабочего процесса
Чтобы построить решение, нажмите CTRL+SHIFT+B.
Инструкции по запуску рабочего процесса см. в следующем разделе: Практическое руководство. Запуск рабочего процесса. Если вы уже выполнили инструкции. Выполните шаг рабочего процесса с другим стилем рабочего процесса и хотите запустить его с помощью рабочего процесса компьютера состояния на этом шаге, перейдите к разделу "Создание и запуск приложения " раздела "Практическое руководство. Запуск рабочего процесса".