共用方式為


使用 DynamicActivity 在執行階段建立活動

本主題僅適用於 Windows Workflow Foundation 4。

DynamicActivity 是具體、密封的類別,具有公用建構函式。DynamicActivity 可用於在執行階段利用活動 DOM 組合活動功能。

DynamicActivity 功能

DynamicActivity 可以存取執行屬性、引數和變數,但不可以存取執行階段服務,例如排定子活動或追蹤。

最上層的屬性可以使用工作流程 Argument 物件來設定。 在命令式程式碼中,這些引數是使用新型別的 CLR 屬性建立的。 在 XAML 中,這些引數則是使用 x:Classx:Member 標籤宣告的。

使用 DynamicActivity 介面建構的活動,此介面具有使用 ICustomTypeDescriptor 的設計工具。 在設計工具中建立的活動可使用 Load 動態載入,如下列程序中的示範。

若要使用命令式程式碼在執行階段建立活動

  1. 開啟 Visual Studio 2010。

  2. 依序選取 [檔案]、[新增]、[專案]。 在 [專案類型] 視窗中,選取 [Visual C#] 下方 [Workflow 4.0],然後選取 [v2010] 節點。 選取 [範本] 視窗中的 [循序工作流程主控台應用程式]。 將新專案命名為 DynamicActivitySample。

  3. 以滑鼠右鍵按一下 HelloActivity 專案中的 Workflow1.xaml,然後選取 [刪除]。

  4. 開啟 Program.cs。 將下列指示詞加入至檔案的頂端。

    using System.Collections.Generic;
    
  5. 以下列程式碼取代 Main 方法的內容,此程式碼會建立 Sequence 活動 (包含單一 WriteLine 活動),並將該活動指派至新的動態活動之 Implementation 屬性。

    //Define the input argument for the activity
    var textOut = new InArgument<string>();
    //Create the activity, property, and implementation
                Activity dynamicWorkflow = new DynamicActivity()
                {
                    Properties = 
                    {
                        new DynamicActivityProperty
                        {
                            Name = "Text",
                            Type = typeof(InArgument<String>),
                            Value = textOut
                        }
                    },
                    Implementation = () => new Sequence()
                    {
                        Activities = 
                        {
                            new WriteLine()
                            {
                                Text = new InArgument<string>(env => textOut.Get(env))
                            }
                        }
                    }
                };
    //Execute the activity with a parameter dictionary
                WorkflowInvoker.Invoke(dynamicWorkflow, new Dictionary<string, object> { { "Text", "Hello World!" } });
                Console.ReadLine();
    
  6. 執行應用程式。 隨即顯示含有 “Hello World!” 文字的主控台視窗。

若要使用 XAML 在執行階段建立活動

  1. 開啟 Visual Studio 2010。

  2. 依序選取 [檔案]、[新增]、[專案]。 在 [專案類型] 視窗中,選取 [Visual C#] 下方 [Workflow 4.0],然後選取 [v2010] 節點。 選取 [範本] 視窗中的 [工作流程主控台應用程式]。 將新專案命名為 DynamicActivitySample。

  3. 開啟 HelloActivity 專案中的 Workflow1.xaml。 按一下設計工具底部的 [引數] 選項。 建立新的 In 引數,其名稱為 TextToWrite、型別為 String

  4. 將工具箱中 [基本] 區段的 [WriteLine] 活動拖曳至設計工具介面上。 將 TextToWrite 值指派給活動的 [Text] 屬性。

  5. 開啟 Program.cs。 將下列指示詞加入至檔案的頂端。

    using System.Activities.XamlIntegration;
    
  6. 以下列程式碼取代 Main 方法的內容。

    Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml");
                    results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } });
    Console.ReadLine();
    
  7. 執行應用程式。 隨即出現含有 “Hello World!” 文字的主控台視窗。

  8. 以滑鼠右鍵按一下 [方案總管] 中的 Workflow1.xaml,然後選取 [檢視程式碼]。 請注意,活動類別是以 x:Class 建立的,而屬性則是以 x:Property 建立的。

另請參閱

工作

DynamicActivity 建立

概念

使用命令式程式碼撰寫工作流程