作法:建立狀態機器工作流程

工作流程可以從內建活動建構,也可以從自訂活動建構。 本主題將逐步解說如何建立同時使用內建活動 (例如 StateMachine 活動) 和自訂活動的工作流程,這些活動是來自前一個操作說明:建立活動主題。 此工作流程會以數字猜測遊戲為模型。

注意

「快速入門」教學課程中的每個主題都與之前的主題息息相關。 若要完成本主題,您必須先完成操作說明:建立活動

建立工作流程

  1. 在 [方案總管] 中,以滑鼠右鍵按一下 [NumberGuessWorkflowActivities],然後依序選取 [新增]、[新增項目]

  2. 在 [已安裝]、[一般項目] 節點中,選取 [工作流程]。 從 [工作流程] 清單中選取 [活動]

  3. 在 [名稱] 方塊中鍵入 StateMachineNumberGuessWorkflow,然後按一下 [新增]

  4. 將 [StateMachine] 活動從 [工具箱] 的 [狀態機器] 區段拖放到工作流程設計介面的 [在此放置活動] 標籤上。

若要建立工作流程變數和引數

  1. 如果 StateMachineNumberGuessWorkflow.xaml 尚未顯示在設計工具中,請在 [方案總管] 中按兩下該工作流程加以顯示。

  2. 按一下工作流程設計工具左下角的 [引數],以顯示 [引數] 窗格。

  3. 按一下 [建立引數]

  4. 在 [名稱] 方塊中鍵入 MaxNumber,從 [方向] 下拉清單中選取 [輸入],從 [引數類型] 下拉式清單中選取 [Int32],然後按 ENTER 鍵以儲存引數。

  5. 按一下 [建立引數]

  6. 在新增 MaxNumber 引數下的 [名稱] 方塊中鍵入 Turns,從 [方向] 下拉式清單中選取 [輸出],從 [引數類型] 下拉式清單中選取 [Int32],然後按 ENTER 鍵。

  7. 在活動設計工具的左下方按一下 [引數],以關閉 [引數] 窗格。

  8. 按一下工作流程設計工具左下角的 [變數],以顯示 [變數] 窗格。

  9. 按一下 [建立變數]

    提示

    若未顯示 [建立變數] 方塊,請按一下工作流程設計工具介面上的 StateMachine 活動,以選取該活動。

  10. 在 [名稱] 方塊中鍵入 Guess,從 [變數類型] 下拉式清單中選取 [Int32],然後按 ENTER 鍵以儲存變數。

  11. 按一下 [建立變數]

  12. 在 [名稱] 方塊中鍵入 Target,從 [變數類型] 下拉式清單中選取 [Int32],然後按 ENTER 鍵以儲存變數。

  13. 在活動設計工具的左下方按一下 [變數],以關閉 [變數] 窗格。

若要加入工作流程活動

  1. 按一下 [State1] 加以選取。 在 [屬性] 視窗中,將 [DisplayName] 變更為 Initialize Target

    提示

    若未顯示 [屬性] 視窗,請從 [檢視] 功能表中選取 [屬性視窗]

  2. 在工作流程設計工具中按兩下剛剛重新命名的 [初始化目標] 狀態,將其展開。

  3. 將 [Assign] 活動從 [工具箱]] 的 [基本] 區段拖放到狀態的 [項目] 區段上。 在 [到] 方塊中鍵入 Target,然後在 [輸入 C# 運算式] 或 [輸入 VB 運算式] 方塊中鍵入下列運算式。

    New System.Random().Next(1, MaxNumber + 1)  
    
    new System.Random().Next(1, MaxNumber + 1)  
    

    提示

    若 [工具箱] 視窗並未顯示,請從 [檢視] 功能表中選取 [工具箱]

  4. 按一下工作流程設計工具最上方階層連結顯示中的 [StateMachine],以回到工作流程設計工具中的整體狀態機器檢視。

  5. 將 [State] 活動從 [工具箱] 的 [狀態機器] 區段拖放到工作流程設計工具上,並將其移至 [初始化目標] 狀態上方。 請注意,將新狀態移至 [初始化目標] 上方時,周圍會出現四個三角形。 將新狀態放置在 [初始化目標] 狀態正下方的三角形上。 這樣會將新狀態放置到工作流程上,並且建立從 [初始化目標] 狀態到新狀態的轉換。

  6. 按一下 [State1] 加以選擇,將 [DisplayName] 變更為 Enter Guess,然後在工作流程設計工具中按兩下該狀態,將其展開。

  7. 將 [WriteLine] 活動從 [工具箱] 的 [基本] 區段拖放到狀態的 [項目] 區段上。

  8. 在 [WriteLine] 的 [Text] 屬性方塊中鍵入下列運算式。

    "Please enter a number between 1 and " & MaxNumber  
    
    "Please enter a number between 1 and " + MaxNumber  
    
  9. 將 [Assign] 活動從 [工具箱] 的 [基本] 區段拖放到狀態的 [結束] 區段上。

  10. 在 [到] 方塊中鍵入 Turns,然後在 [輸入 C# 運算式] 或 [輸入 VB 運算式] 方塊中鍵入 Turns + 1

  11. 按一下工作流程設計工具最上方階層連結顯示中的 [StateMachine],以回到工作流程設計工具中的整體狀態機器檢視。

  12. 將 [FinalState] 活動從 [工具箱] 的 [狀態機器] 區段拖曳到 [輸入猜測] 狀態上方,然後將其放置在出現於 [輸入猜測] 狀態右邊的三角形上,以在 [輸入猜測] 與 [FinalState] 之間建立轉換。

  13. 轉換的預設名稱是 T2。 按一下工作流程設計工具中的轉換加以選取,並將其 [DisplayName] 設定為 [猜測正確]。 然後按一下並選取 [FinalState],將其拖曳到右側,使其有空間顯示完整的轉換名稱,而不會重疊任何一個狀態。 這將可以更容易完成教學課程中的其他步驟。

  14. 在工作流程設計工具中按兩下剛剛重新命名的 [猜測正確] 轉換,將其展開。

  15. 將 [ReadInt] 活動從 [工具箱] 的 [NumberGuessWorkflowActivities] 區段拖放到轉換的 [觸發程序] 區段。

  16. 在 [ReadInt] 活動的 [屬性] 視窗中,在 [BookmarkName] 屬性值方塊中鍵入 "EnterGuess" (含引號),然後在 [Result] 屬性值方塊中鍵入 Guess

  17. 在 [猜測正確] 轉換的 [Condition] 屬性值方塊中鍵入下列運算式。

    Guess = Target  
    
    Guess == Target  
    
  18. 按一下工作流程設計工具最上方階層連結顯示中的 [StateMachine],以回到工作流程設計工具中的整體狀態機器檢視。

    注意

    收到觸發事件時會發生轉換,若有 Condition 存在,則會評估為 True。 針對此轉換,如果使用者的 Guess 符合隨機產生的 Target,則會將控制權轉移給 [FinalState],同時完成工作流程。

  19. 依據猜測是否正確,工作流程應轉換到 [FinalState],或回到 [輸入猜測] 狀態重新猜測。 兩種轉換共用相同的等候觸發程序,等候經由 [ReadInt] 活動接收使用者的猜測。 這稱為共用轉換。 若要建立共用轉換,請按一下表示 [猜測正確] 開始轉換的圓形,然後將其拖曳到所需的狀態。 本例中的轉換是自我轉換,因此,請將 [猜測正確] 轉換的起點拖放回 [輸入猜測] 狀態的底部。 建立轉換之後,在工作流程設計工具中選取該轉換,然後將其 [DisplayName] 屬性設定為 [猜測不正確]

    注意

    共用轉換可以從轉換設計工具中建立,方法是按一下轉換設計工具底部的 [新增共用的觸發程序轉換],然後從 [要連線的可用狀態] 下拉式清單中選取所需的目標狀態。

    注意

    請注意,如果轉換的 Condition 值評估為 false (或所有共用觸發轉換的條件皆評估為 false),則不會發生轉換,且會重新排程該狀態之所有轉換的所有觸發。 由於設定條件的方式,在本教學課程中不會發生這種情況 (我們對於猜測是否正確有具體的動作)。

  20. 在工作流程設計工具中按兩下 [猜測不正確] 轉換,將其展開。 請注意,[觸發程序] 已設定為 [猜測正確] 轉換所使用的同一個 [ReadInt] 活動。

  21. 在 [Condition] 屬性值方塊中鍵入下列運算式。

    Guess <> Target  
    
    Guess != Target  
    
  22. 將 [If] 活動從 [工具箱] 的 [控制流程] 區段拖放到轉換的 [動作] 區段。

  23. 在 [If] 活動的 [Condition] 屬性值方塊中鍵入下列運算式。

    Guess < Target
    
  24. 從 [工具箱] 的 [基本] 區段拖放兩個 [WriteLine] 活動,其中一個拖放到 [If] 活動的 [Then] 區段,另一個拖放到 [Else] 區段。

  25. 按一下 [Then] 區段中的 [WriteLine] 活動加以選取,然後在 [Text] 屬性值方塊中鍵入下列運算式。

    "Your guess is too low."  
    
  26. 按一下 [Else] 區段中的 [WriteLine] 活動加以選取,然後在 [Text] 屬性值方塊中鍵入下列運算式。

    "Your guess is too high."  
    
  27. 按一下工作流程設計工具最上方階層連結顯示中的 [StateMachine],以回到工作流程設計工具中的整體狀態機器檢視。

    下列範例示範完成的工作流程。

    Illustration that shows the completed state machine workflow.

若要建置工作流程

  1. 按下 CTRL+SHIFT+B 以建置方案。

    如需如何執行工作流程的指示,請參閱下一個主題:操作說明:執行工作流程。 若是使用了不同樣式的工作流程完成操作說明:執行工作流程步驟,並想使用此步驟中的狀態機器工作流程來執行,請直接跳到操作說明:執行工作流程建置和執行應用程式一節。

另請參閱