共用方式為


使用 DynamicActivity 在運行時間建立活動

DynamicActivity 是具有公用建構函式的具象密封類別。 DynamicActivity 可用於在執行時使用活動 DOM 組合活動功能。

DynamicActivity 功能

DynamicActivity 能存取執行屬性、參數與變數,但無法存取執行時服務,如排程子活動或追蹤。

最上層屬性可以使用工作流程 Argument 對象來設定。 在命令式程式代碼中,這些自變數是使用新類型的CLR屬性所建立。 在 XAML 中,會使用 x:Classx:Member 標記來宣告它們。

使用 DynamicActivity 介面來建構活動,並使用搭配設計工具 ICustomTypeDescriptor 的設計師。 設計器中建立的活動可以使用Load 動態載入,如下列程序所示。

在運行期間使用指令式程式碼建立活動

  1. OpenVisual Studio 2010。

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

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

  4. 開啟 Program.cs。 將下列指示詞新增至檔案頂端。

    using System.Collections.Generic;
    
  5. Main方法的內容替換為以下程式碼,該程式碼會建立一個活動,其中包含單一Sequence活動,並將此活動指派給新的動態活動的WriteLine屬性。

    //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#] 底下的 [工作流程 4.0],然後選取 v2010 節點。 在 [範本] 視窗中選取 [工作流程主控台應用程式]。 將新專案命名為 DynamicActivitySample。

  3. 在 HelloActivity 專案中開啟 Workflow1.xaml。 點擊設計工具底部的 [參數] 選項。 建立一個名為In且類型為TextToWrite的新String引數。

  4. WriteLine 活動從工具箱的 Primitives 區段拖曳至設計工具介面。 將值 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. 以滑鼠右鍵點擊 Solution Explorer 中的 Workflow1.xaml 檔案,然後選取 檢視程式碼。 請注意,活動類別是使用 x:Class 建立,而 屬性是使用 x:Property建立的。

另請參閱