Sdílet prostřednictvím


Vytvoření aktivity za běhu pomocí funkce DynamicActivity

DynamicActivity je konkrétní, uzavřená třída s veřejným konstruktorem. DynamicActivity lze použít k sestavení funkcí aktivity za běhu pomocí modulu DOM aktivity.

Funkce DynamicActivity

DynamicActivity má přístup k vlastnostem provádění, argumentům a proměnným, ale žádný přístup ke službám runtime, jako je plánování podřízených aktivit nebo sledování.

Vlastnosti nejvyšší úrovně lze nastavit pomocí objektů pracovního postupu Argument . V imperativním kódu jsou tyto argumenty vytvořeny pomocí vlastností CLR na novém typu. V JAZYCE XAML jsou deklarovány pomocí x:Class a x:Member značky.

Aktivity vytvořené pomocí DynamicActivity rozhraní interagují s návrhářem pomocí ICustomTypeDescriptor. Aktivity vytvořené v návrháři lze dynamicky načíst pomocí Load, jak je znázorněno v následujícím postupu.

Vytvoření aktivity za běhu pomocí imperativního kódu

  1. OpenVisual Studio 2010.

  2. Vyberte Soubor, Nový, Projekt. V okně Typy projektů vyberte v části Visual C#pracovní postup 4.0 a vyberte uzel v2010. V okně Šablony vyberte konzolovou aplikaci sekvenčního pracovního postupu. Pojmenujte nový projekt DynamicActivitySample.

  3. V projektu HelloActivity klikněte pravým tlačítkem myši na Workflow1.xaml a vyberte Odstranit.

  4. Otevřete soubor Program.cs. Na začátek souboru přidejte následující direktivu.

    using System.Collections.Generic;
    
  5. Nahraďte obsah Main metody následujícím kódem, který vytvoří Sequence aktivitu, která obsahuje jednu WriteLine aktivitu a přiřadí ji k Implementation vlastnosti nové dynamické aktivity.

    //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. Spusťte aplikaci. Okno konzoly s textem "Hello World!" se zobrazí.

Vytvoření aktivity za běhu pomocí XAML

  1. Otevřete Visual Studio 2010.

  2. Vyberte Soubor, Nový, Projekt. V okně Typy projektů vyberte v části Visual C#pracovní postup 4.0 a vyberte uzel v2010. V okně Šablony vyberte konzolovou aplikaci pracovního postupu. Pojmenujte nový projekt DynamicActivitySample.

  3. Otevřete Workflow1.xaml v projektu HelloActivity. Klikněte na možnost Argumenty v dolní části návrháře. Vytvořte nový In argument s názvem TextToWrite typu String.

  4. Přetáhněte aktivitu WriteLine z části Primitives panelu nástrojů na plochu návrháře. Přiřaďte hodnotu TextToWrite vlastnosti Text aktivity.

  5. Otevřete soubor Program.cs. Na začátek souboru přidejte následující direktivu.

    using System.Activities.XamlIntegration;
    
  6. Main Obsah metody nahraďte následujícím kódem.

    Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml");
                    results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } });
    Console.ReadLine();
    
  7. Spusťte aplikaci. Zobrazí se okno konzoly s textem "Hello World!".

  8. V Průzkumníku řešení klikněte pravým tlačítkem myši na soubor Workflow1.xaml a vyberte Zobrazit kód. Všimněte si, že třída aktivity je vytvořena s x:Class a vlastnost je vytvořena pomocí x:Property.

Viz také