Condividi tramite


Esecuzione dei flussi di lavoro

Le istanze di un flusso di lavoro possono essere avviate in due modi, ovvero tramite tipi di flusso di lavoro o tramite tag del flusso di lavoro basati su XAML.

Per avviare un'istanza del flusso di lavoro tramite un tipo di flusso di lavoro, chiamare il metodo CreateWorkflow passando l'oggetto System.Type del flusso di lavoro, quindi chiamare il metodo Start.

Dim workflowInstance As WorkflowInstance
workflowInstance = workflowRuntime.CreateWorkflow(GetType(Workflow1))
workflowInstance.Start()
WorkflowInstance instance = workflowRuntime.CreateWorkflow
    (typeof(WorkflowApplication.Workflow1));
instance.Start();

Per avviare un'istanza del flusso di lavoro utilizzando solo tag del flusso di lavoro, chiamare il metodo CreateWorkflow passando l'oggetto XmlReader contenente la definizione del flusso di lavoro in un file o in un flusso, quindi chiamare il metodo Start.

Dim workflowInstance As WorkflowInstance
workflowInstance = workflowRuntime.CreateWorkflow(workflowDefinitionReader)
workflowInstance.Start()
WorkflowInstance instance = workflowRuntime.CreateWorkflow(workflowDefinitionReader);
instance.Start();

Nota

Se utilizza un file di markup del flusso di lavoro con un file di separazione del codice, è necessario passare il tipo di flusso di lavoro nel metodo CreateWorkflow anziché passare il file di markup del flusso di lavoro.

Per impostazione predefinita, i flussi di lavoro vengono avviati in modo asincrono dal motore di runtime di Windows Workflow Foundation. Per garantire che l'applicazione host non si chiuda prima che il flusso di lavoro abbia completato l'esecuzione, è necessario utilizzare oggetti threading di sincronizzazione forniti da .NET Framework, ad esempio l'oggetto AutoResetEvent. Nell'esempio di codice seguente viene illustrato come creare e avviare il runtime del flusso di lavoro, avviare un'istanza del flusso di lavoro ed eseguire la chiusura utilizzando una classe AutoResetEvent quando l'oggetto WorkflowRuntime genera l'evento WorkflowCompleted.

Class Program

    Shared WaitHandle As New AutoResetEvent(False)

    Shared Sub Main()
        Using workflowRuntime As New WorkflowRuntime()
            AddHandler workflowRuntime.WorkflowCompleted, AddressOf OnWorkflowCompleted

            Dim workflowInstance As WorkflowInstance
            workflowInstance = workflowRuntime.CreateWorkflow(GetType(Workflow1))
            workflowInstance.Start()
            WaitHandle.WaitOne()
        End Using
    End Sub

    Shared Sub OnWorkflowCompleted(ByVal sender As Object, ByVal e As WorkflowCompletedEventArgs)
        WaitHandle.Set()
    End Sub
End Class
static void Main(string[] args)
{
    using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
    {
        AutoResetEvent waitHandle = new AutoResetEvent(false);

        workflowRuntime.WorkflowCompleted += delegate(object sender,
            WorkflowCompletedEventArgs e)
        { 
            waitHandle.Set(); 
        };
        
        WorkflowInstance instance = workflowRuntime.CreateWorkflow
            (typeof(WorkflowApplication.Workflow1));

        instance.Start();

        waitHandle.WaitOne();
    }
}

In Windows Workflow Foundation non sono previste restrizioni sull'ambiente di esecuzione dell'applicazione host. Ad esempio, in alcuni ambienti di applicazioni host può essere necessario che processi diversi vengano eseguiti in domini applicazione diversi, ognuno con il proprio modello di threading indipendente dagli altri processi in esecuzione. In questo modo, Windows Workflow Foundation rimane portabile ed estendibile mentre cambiano le architetture di hosting sottostanti.

Nota

Windows Workflow Foundation utilizza il pool di thread .NET. Se l'applicazione host è di tipo multithread e utilizza il pool di thread .NET in modo esteso, è possibile che si generi una mancanza di risorse per il pool di thread .NET. Questo può provocare timeout quando un servizio di persistenza tenta di completare una transazione di persistenza perché anche gli oggetti Transaction utilizzano il pool di thread .NET.

Vedere anche

Concetti

Creazione della classe WorkflowRuntime
Elaborazione di eventi di WorkflowRuntime

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.