作法:建立狀態機器工作流程
工作流程可以從內建活動建構,也可以從自訂活動建構。 本主題將逐步解說如何建立同時使用內建活動 (例如 StateMachine 活動) 和自訂活動的工作流程,這些活動是來自前一個操作說明:建立活動主題。 此工作流程會以數字猜測遊戲為模型。
注意
「快速入門」教學課程中的每個主題都與之前的主題息息相關。 若要完成本主題,您必須先完成操作說明:建立活動。
建立工作流程
在 [方案總管] 中,以滑鼠右鍵按一下 [NumberGuessWorkflowActivities],然後依序選取 [新增]、[新增項目]。
在 [已安裝]、[一般項目] 節點中,選取 [工作流程]。 從 [工作流程] 清單中選取 [活動]。
在 [名稱] 方塊中鍵入
StateMachineNumberGuessWorkflow
,然後按一下 [新增]。將 [StateMachine] 活動從 [工具箱] 的 [狀態機器] 區段拖放到工作流程設計介面的 [在此放置活動] 標籤上。
若要建立工作流程變數和引數
如果 StateMachineNumberGuessWorkflow.xaml 尚未顯示在設計工具中,請在 [方案總管] 中按兩下該工作流程加以顯示。
按一下工作流程設計工具左下角的 [引數],以顯示 [引數] 窗格。
按一下 [建立引數]。
在 [名稱] 方塊中鍵入
MaxNumber
,從 [方向] 下拉清單中選取 [輸入],從 [引數類型] 下拉式清單中選取 [Int32],然後按 ENTER 鍵以儲存引數。按一下 [建立引數]。
在新增
MaxNumber
引數下的 [名稱] 方塊中鍵入Turns
,從 [方向] 下拉式清單中選取 [輸出],從 [引數類型] 下拉式清單中選取 [Int32],然後按 ENTER 鍵。在活動設計工具的左下方按一下 [引數],以關閉 [引數] 窗格。
按一下工作流程設計工具左下角的 [變數],以顯示 [變數] 窗格。
按一下 [建立變數]。
提示
若未顯示 [建立變數] 方塊,請按一下工作流程設計工具介面上的 StateMachine 活動,以選取該活動。
在 [名稱] 方塊中鍵入
Guess
,從 [變數類型] 下拉式清單中選取 [Int32],然後按 ENTER 鍵以儲存變數。按一下 [建立變數]。
在 [名稱] 方塊中鍵入
Target
,從 [變數類型] 下拉式清單中選取 [Int32],然後按 ENTER 鍵以儲存變數。在活動設計工具的左下方按一下 [變數],以關閉 [變數] 窗格。
若要加入工作流程活動
按一下 [State1] 加以選取。 在 [屬性] 視窗中,將 [DisplayName] 變更為
Initialize Target
。提示
若未顯示 [屬性] 視窗,請從 [檢視] 功能表中選取 [屬性視窗]。
在工作流程設計工具中按兩下剛剛重新命名的 [初始化目標] 狀態,將其展開。
將 [Assign] 活動從 [工具箱]] 的 [基本] 區段拖放到狀態的 [項目] 區段上。 在 [到] 方塊中鍵入
Target
,然後在 [輸入 C# 運算式] 或 [輸入 VB 運算式] 方塊中鍵入下列運算式。New System.Random().Next(1, MaxNumber + 1)
new System.Random().Next(1, MaxNumber + 1)
提示
若 [工具箱] 視窗並未顯示,請從 [檢視] 功能表中選取 [工具箱]。
按一下工作流程設計工具最上方階層連結顯示中的 [StateMachine],以回到工作流程設計工具中的整體狀態機器檢視。
將 [State] 活動從 [工具箱] 的 [狀態機器] 區段拖放到工作流程設計工具上,並將其移至 [初始化目標] 狀態上方。 請注意,將新狀態移至 [初始化目標] 上方時,周圍會出現四個三角形。 將新狀態放置在 [初始化目標] 狀態正下方的三角形上。 這樣會將新狀態放置到工作流程上,並且建立從 [初始化目標] 狀態到新狀態的轉換。
按一下 [State1] 加以選擇,將 [DisplayName] 變更為
Enter Guess
,然後在工作流程設計工具中按兩下該狀態,將其展開。將 [WriteLine] 活動從 [工具箱] 的 [基本] 區段拖放到狀態的 [項目] 區段上。
在 [WriteLine] 的 [Text] 屬性方塊中鍵入下列運算式。
"Please enter a number between 1 and " & MaxNumber
"Please enter a number between 1 and " + MaxNumber
將 [Assign] 活動從 [工具箱] 的 [基本] 區段拖放到狀態的 [結束] 區段上。
在 [到] 方塊中鍵入
Turns
,然後在 [輸入 C# 運算式] 或 [輸入 VB 運算式] 方塊中鍵入Turns + 1
。按一下工作流程設計工具最上方階層連結顯示中的 [StateMachine],以回到工作流程設計工具中的整體狀態機器檢視。
將 [FinalState] 活動從 [工具箱] 的 [狀態機器] 區段拖曳到 [輸入猜測] 狀態上方,然後將其放置在出現於 [輸入猜測] 狀態右邊的三角形上,以在 [輸入猜測] 與 [FinalState] 之間建立轉換。
轉換的預設名稱是 T2。 按一下工作流程設計工具中的轉換加以選取,並將其 [DisplayName] 設定為 [猜測正確]。 然後按一下並選取 [FinalState],將其拖曳到右側,使其有空間顯示完整的轉換名稱,而不會重疊任何一個狀態。 這將可以更容易完成教學課程中的其他步驟。
在工作流程設計工具中按兩下剛剛重新命名的 [猜測正確] 轉換,將其展開。
將 [ReadInt] 活動從 [工具箱] 的 [NumberGuessWorkflowActivities] 區段拖放到轉換的 [觸發程序] 區段。
在 [ReadInt] 活動的 [屬性] 視窗中,在 [BookmarkName] 屬性值方塊中鍵入
"EnterGuess"
(含引號),然後在 [Result] 屬性值方塊中鍵入Guess
在 [猜測正確] 轉換的 [Condition] 屬性值方塊中鍵入下列運算式。
Guess = Target
Guess == Target
按一下工作流程設計工具最上方階層連結顯示中的 [StateMachine],以回到工作流程設計工具中的整體狀態機器檢視。
注意
收到觸發事件時會發生轉換,若有 Condition 存在,則會評估為
True
。 針對此轉換,如果使用者的Guess
符合隨機產生的Target
,則會將控制權轉移給 [FinalState],同時完成工作流程。依據猜測是否正確,工作流程應轉換到 [FinalState],或回到 [輸入猜測] 狀態重新猜測。 兩種轉換共用相同的等候觸發程序,等候經由 [ReadInt] 活動接收使用者的猜測。 這稱為共用轉換。 若要建立共用轉換,請按一下表示 [猜測正確] 開始轉換的圓形,然後將其拖曳到所需的狀態。 本例中的轉換是自我轉換,因此,請將 [猜測正確] 轉換的起點拖放回 [輸入猜測] 狀態的底部。 建立轉換之後,在工作流程設計工具中選取該轉換,然後將其 [DisplayName] 屬性設定為 [猜測不正確]。
注意
共用轉換可以從轉換設計工具中建立,方法是按一下轉換設計工具底部的 [新增共用的觸發程序轉換],然後從 [要連線的可用狀態] 下拉式清單中選取所需的目標狀態。
注意
請注意,如果轉換的 Condition 值評估為
false
(或所有共用觸發轉換的條件皆評估為false
),則不會發生轉換,且會重新排程該狀態之所有轉換的所有觸發。 由於設定條件的方式,在本教學課程中不會發生這種情況 (我們對於猜測是否正確有具體的動作)。在工作流程設計工具中按兩下 [猜測不正確] 轉換,將其展開。 請注意,[觸發程序] 已設定為 [猜測正確] 轉換所使用的同一個 [ReadInt] 活動。
在 [Condition] 屬性值方塊中鍵入下列運算式。
Guess <> Target
Guess != Target
將 [If] 活動從 [工具箱] 的 [控制流程] 區段拖放到轉換的 [動作] 區段。
在 [If] 活動的 [Condition] 屬性值方塊中鍵入下列運算式。
Guess < Target
從 [工具箱] 的 [基本] 區段拖放兩個 [WriteLine] 活動,其中一個拖放到 [If] 活動的 [Then] 區段,另一個拖放到 [Else] 區段。
按一下 [Then] 區段中的 [WriteLine] 活動加以選取,然後在 [Text] 屬性值方塊中鍵入下列運算式。
"Your guess is too low."
按一下 [Else] 區段中的 [WriteLine] 活動加以選取,然後在 [Text] 屬性值方塊中鍵入下列運算式。
"Your guess is too high."
按一下工作流程設計工具最上方階層連結顯示中的 [StateMachine],以回到工作流程設計工具中的整體狀態機器檢視。
下列範例示範完成的工作流程。
若要建置工作流程
按下 CTRL+SHIFT+B 以建置方案。
如需如何執行工作流程的指示,請參閱下一個主題:操作說明:執行工作流程。 若是使用了不同樣式的工作流程完成操作說明:執行工作流程步驟,並想使用此步驟中的狀態機器工作流程來執行,請直接跳到操作說明:執行工作流程的建置和執行應用程式一節。