在工作流程設計工具中定義及取用活動委派
.NET Framework 4.5 包含 InvokeDelegate 活動立即可用的設計工具。 這個設計工具可用來將委派指派給衍生自 ActivityDelegate 的活動,例如 ActivityAction 或 ActivityFunc<TResult>。
定義活動委派
建立新的 [工作流程主控台應用程式] 專案。
注意
如果您看不到 [工作流程] 專案範本,則必須先安裝 Visual Studio 的 Windows Workflow Foundation 元件。 如需詳細指示,請參閱安裝 Windows Workflow Foundation。
在 [方案總管] 中,以滑鼠右鍵按一下專案,然後依序選取 [新增]>[新項目]。 選取 [工作流程] 類別,然後選取 [活動] 項目範本。 將新活動命名為 MyForEach.xaml,然後選取 [確定]。
此活動會在工作流程設計工具中開啟。
在工作流程設計工具中,按一下 [引數] 索引標籤。
按一下 [建立引數]。 將新引數命名為 Items。
在 [引數型別] 資料行中,選取 [[T] 陣列]。
在型別瀏覽器中,選取 [物件],然後選取 [確定]。
再按一下 [建立引數]。 將新引數命名為 Body。 在新引數的 [方向] 資料行中,選取 [屬性]。
在 [引數型別] 資料行中,選取 [瀏覽型別]。
在型別瀏覽器中,於 [型別名稱] 欄位中輸入 ActivityAction。 在樹狀檢視中選取 [ActivityAction<T>]。 在出現的下拉式清單中選取 [物件],將 ActivityAction<Object> 型別指派給引數。
將 While 活動從工具箱的 [控制流程] 區段拖曳至設計工具介面。
選取 While 活動,然後選取 [變數] 索引標籤。
選取 [建立變數]。 將新變數命名為 Index。
在 [變數型別] 資料行中,選取 [Int32]。 將 [範圍] 保留為 [While],以及將 [預設] 資料行保留空白。
將 While 活動的 [Condition] 屬性設為 index < Items.Length;。
將 InvokeDelegate 活動從工具箱的 [基本] 區段拖曳至 While 活動的 [主體]。
選取委派下拉式清單中的 [主體]。
在 活動的 [屬性] 格線中,按一下 [委派引數]InvokeDelegate 屬性中的 按鈕。
在名為 Argument 之引數的 [值] 資料行中,輸入 Items[Index]。 按一下 [確定] 以關閉 [DelegateArguments] 對話方塊。
將 Assign 活動拖曳到 InvokeDelegate 活動底下的水平線上。 Assign 活動隨即建立,而且會自動建立 Sequence 活動以在 MyForEach 活動的 [主體] 區段中包含兩個活動。 需要此序列,因為 [主體] 區段只能包含單一活動。 自動建立新的 Sequence 活動是 .NET Framework 4.5 的新功能。
將 Assign 活動的 [To] 屬性設為 index。 將 Assign 活動的 [Value] 屬性設為 index+1。
自訂 MyForEach 活動會針對每個透過 Items 集合傳遞給它的值叫用一次任意活動,並以集合中的值做為活動的輸入。
使用工作流程中的自訂活動
按下 Ctrl+Shift+B 以建置此專案。
在 [方案總管] 中,開啟設計工具中的 Workflow1.xaml。
從工具箱將 MyForEach 活動拖曳至設計工具介面。 此活動位於工具箱的區段中,其名稱與專案的名稱相同。
將 MyForEach 活動的 [Items] 屬性設為 new Object[] {1, "abc"}。
將 WriteLine 活動從工具箱的 [基本] 區段拖曳至 MyForEach 活動的 [Delegate:Body] 區段。
將 WriteLine 活動的 [Text] 屬性設為 Argument.ToString()。
執行工作流程時,主控台會顯示以下輸出:
1abc