Creazione di un'attività in fase di esecuzione con DynamicActivityCreating an Activity at Runtime with DynamicActivity

DynamicActivity è una classe sealed concreta con costruttore pubblico.DynamicActivity is a concrete, sealed class with a public constructor. DynamicActivity può essere usata per assemblare la funzionalità di attività in fase di esecuzione tramite un unico DOM di attività.DynamicActivity can be used to assemble activity functionality at runtime using an activity DOM.

Funzionalità DynamicActivityDynamicActivity Features

La classe DynamicActivity dispone dell'accesso alle proprietà, agli argomenti e alle variabili di esecuzione, ma non ai servizi in fase di esecuzione quali la pianificazione di attività figlio o il rilevamento.DynamicActivity has access to execution properties, arguments and variables, but no access to run-time services such as scheduling child activities or tracking.

Usando gli oggetti Argument del flusso di lavoro è possibile impostare le proprietà di primo livello.Top-level properties can be set using workflow Argument objects. Nel codice imperativo, questi argomenti vengono creati usando le proprietà CLR in un nuovo tipo.In imperative code, these arguments are created using CLR properties on a new type. In XAML, vengono dichiarati usando i tag x:Class e x:Member.In XAML, they are declared using x:Class and x:Member tags.

Le attività costruite usando la classe DynamicActivity si interfacciano con l'utilità di progettazione tramite l'oggetto ICustomTypeDescriptor.Activities constructed using DynamicActivity interface with the designer using ICustomTypeDescriptor. Le attività create nell'utilità di progettazione possono essere caricate usando il metodo Load in modo dinamico, come dimostrato nella procedura riportata di seguito.Activities created in the designer can be loaded dynamically using Load, as demonstrated in the following procedure.

Per creare un'attività in fase di esecuzione usando il codice imperativoTo create an activity at runtime using imperative code

  1. Aprire Visual Studio 2010Visual Studio 2010.OpenVisual Studio 2010Visual Studio 2010.

  2. Selezionare File, nuova, progetto.Select File, New, Project. Selezionare Workflow 4.0 in Visual c# nel tipi di progetto window e selezionare il v2010 nodo.Select Workflow 4.0 under Visual C# in the Project Types window, and select the v2010 node. Selezionare applicazione Console flusso di lavoro sequenziale nel modelli finestra.Select Sequential Workflow Console Application in the Templates window. Assegnare il nome DynamicActivitySample al nuovo progetto.Name the new project DynamicActivitySample.

  3. Fare doppio clic su Workflow1 nel progetto HelloActivity e selezionare eliminare.Right-click Workflow1.xaml in the HelloActivity project and select Delete.

  4. Aprire Program.cs.Open Program.cs. Aggiungere la seguente direttiva all'inizio del file.Add the following directive to the top of the file.

    using System.Collections.Generic;  
    
  5. Sostituire il contenuto del metodo Main con il codice seguente che crea un'attività Sequence che contiene una singola attività WriteLine e la assegna alla proprietà Implementation di una nuova attività dinamica.Replace the contents of the Main method with the following code, which creates a Sequence activity that contains a single WriteLine activity and assigns it to the Implementation property of a new dynamic activity.

    //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. Eseguire l'applicazione.Execute the application. Una finestra della console con il testo "Hello World!"A console window with the text "Hello World!" Consente di visualizzare.displays.

Per creare un'attività in fase di esecuzione usando il codice XAMLTo create an activity at runtime using XAML

  1. Aprire Visual Studio 2010Visual Studio 2010.Open Visual Studio 2010Visual Studio 2010.

  2. Selezionare File, nuova, progetto.Select File, New, Project. Selezionare Workflow 4.0 in Visual c# nel tipi di progetto window e selezionare il v2010 nodo.Select Workflow 4.0 under Visual C# in the Project Types window, and select the v2010 node. Selezionare applicazione Console flusso di lavoro nel modelli finestra.Select Workflow Console Application in the Templates window. Assegnare il nome DynamicActivitySample al nuovo progetto.Name the new project DynamicActivitySample.

  3. Aprire Workflow1.xaml nel progetto HelloActivity.Open Workflow1.xaml in the HelloActivity project. Fare clic su di argomenti opzione nella parte inferiore della finestra di progettazione.Click the Arguments option at the bottom of the designer. Creare un nuovo argomento In denominato TextToWrite di tipo String.Create a new In argument called TextToWrite of type String.

  4. Trascinare un WriteLine attività di primitive sezione della casella degli strumenti nell'area di progettazione.Drag a WriteLine activity from the Primitives section of the toolbox onto the designer surface. Assegnare il valore TextToWrite per il testo proprietà dell'attività.Assign the value TextToWrite to the Text property of the activity.

  5. Aprire Program.cs.Open Program.cs. Aggiungere la seguente direttiva all'inizio del file.Add the following directive to the top of the file.

    using System.Activities.XamlIntegration;  
    
  6. Sostituire il contenuto del metodo Main con il codice riportato di seguito.Replace the contents of the Main method with the following code.

    Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml");  
                    results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } });  
    Console.ReadLine();  
    
  7. Eseguire l'applicazione.Execute the application. Una finestra della console con il testo "Hello World!"A console window with the text "Hello World!" viene visualizzata.appears.

  8. Il file Workflow1 nel Esplora e selezionare Visualizza codice.Right-click the Workflow1.xaml file in the Solution Explorer and select View Code. Si noti che la classe di attività viene creata con x:Class e la proprietà viene creata con x:Property.Note that the activity class is created with x:Class and the property is created with x:Property.

Vedere ancheSee Also

Creazione di flussi di lavoro, attività ed espressioni tramite codice imperativoAuthoring Workflows, Activities, and Expressions Using Imperative Code
Creazione DynamicActivityDynamicActivity Creation