Condividi tramite


Creazione di un'attività in fase di esecuzione con DynamicActivity

DynamicActivity è una classe concreta e sigillata con un costruttore pubblico. DynamicActivity può essere usato per assemblare le funzionalità dell'attività in fase di esecuzione usando un DOM delle attività.

Funzionalità DynamicActivity

DynamicActivity ha accesso a proprietà di esecuzione, argomenti e variabili, ma non ha accesso ai servizi durante l'esecuzione, come la pianificazione delle attività figlie o il rilevamento.

Le proprietà di primo livello possono essere impostate usando oggetti flusso di lavoro Argument . Nel codice imperativo questi argomenti vengono creati usando le proprietà CLR in un nuovo tipo. In XAML vengono dichiarati usando x:Class tag e x:Member .

Le attività costruite mediante DynamicActivity interagiscono con il progettista tramite ICustomTypeDescriptor. Le attività create nella finestra di progettazione possono essere caricate in modo dinamico usando Load, come illustrato nella procedura seguente.

Per creare un'attività in fase di esecuzione usando codice imperativo

  1. OpenVisual Studio 2010.

  2. Selezionare File, Nuovo, Progetto. Selezionare Flusso di lavoro 4.0 in Visual C# nella finestra Tipi di progetto e selezionare il nodo v2010 . Selezionare nella finestra Modelli l'Applicazione console per il flusso di lavoro sequenziale. Denominare il nuovo progetto DynamicActivitySample.

  3. Fare clic con il pulsante destro del mouse su Workflow1.xaml nel progetto HelloActivity e scegliere Elimina.

  4. Aprire Program.cs. Aggiungere la direttiva seguente all'inizio del file.

    using System.Collections.Generic;  
    
  5. Sostituire il contenuto del Main metodo con il codice seguente, che crea un'attività Sequence che contiene una singola WriteLine attività e la assegna alla Implementation proprietà di una nuova attività dinamica.

    //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. Viene visualizzata una finestra della console con il testo "Hello World!".

Per creare un'attività in fase di esecuzione usando XAML

  1. Aprire Visual Studio 2010.

  2. Selezionare File, Nuovo, Progetto. Selezionare Flusso di lavoro 4.0 in Visual C# nella finestra Tipi di progetto e selezionare il nodo v2010 . Selezionare Applicazione console Workflow nella finestra Modelli. Denominare il nuovo progetto DynamicActivitySample.

  3. Aprire Workflow1.xaml nel progetto HelloActivity. Fare clic sull'opzione Argomenti nella parte inferiore della finestra di progettazione. Creare un argomento In nuovo denominato TextToWrite di tipo String.

  4. Trascinare un'attività WriteLine dalla sezione Primitive della casella degli strumenti nell'area di progettazione. Assegnare il valore TextToWrite alla proprietà Text dell'attività.

  5. Aprire Program.cs. Aggiungere la direttiva seguente all'inizio del file.

    using System.Activities.XamlIntegration;  
    
  6. Sostituire il contenuto del Main metodo con il codice seguente.

    Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml");  
                    results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } });  
    Console.ReadLine();  
    
  7. Eseguire l'applicazione. Viene visualizzata una finestra della console con il testo "Hello World!".

  8. Fare clic con il pulsante destro del mouse sul file Workflow1.xaml in Esplora soluzioni e scegliere Visualizza codice. Si noti che la classe di attività viene creata con x:Class e la proprietà viene creata con x:Property.

Vedere anche