Compartir a través de


Ejecución de flujos de trabajo

Las instancias de flujo de trabajo pueden iniciarse de dos maneras: mediante los tipos de flujo de trabajo, o a través del marcado de flujo de trabajo basado en XAML.

Para iniciar una instancia de flujo de trabajo mediante un tipo de flujo de trabajo, llame al método CreateWorkflow, pasando el System.Type del flujo de trabajo y, a continuación, llame a Start.

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

Para iniciar una instancia de flujo de trabajo sólo mediante el marcado de flujo de trabajo, llame al método CreateWorkflow, pasando el XmlReader que contiene la definición de flujo de trabajo en un archivo o secuencia y, a continuación, llame a Start.

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

Nota

Si utiliza un archivo de marcado de flujo de trabajo con un archivo con separación de código, debe pasar el tipo del flujo de trabajo a CreateWorkflow, en lugar de pasar el archivo de marcado de flujo de trabajo.

De manera predeterminada, el motor en tiempo de ejecución de Windows Workflow inicia los flujos de trabajo de forma asincrónica. Para asegurarse de que la aplicación host no se cierra antes de que finalice la ejecución del flujo de trabajo, debe utilizar los objetos de subprocesamiento de sincronización proporcionados por .NET Framework, como, por ejemplo, el objeto AutoResetEvent. El siguiente ejemplo de código muestra cómo crear e iniciar el tiempo de ejecución del flujo de trabajo, iniciar una instancia de flujo de trabajo, y salir utilizando un AutoResetEvent cuando el objeto WorkflowRuntime provoca el 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();
    }
}

Windows Workflow Foundation no tiene ninguna restricción en el entorno de ejecución de la aplicación de hospedaje. Por ejemplo, algunos entornos de aplicación host pueden requerir que varios procesos se ejecuten en distintos dominios de aplicación, cada uno con su propio modelo de subproceso independiente de los otros procesos de ejecución. De este modo, Windows Workflow Foundation sigue siendo portátil y extensible a medida que cambian las arquitecturas de hospedaje subyacentes.

Nota

Windows Workflow Foundation utiliza el grupo de subprocesos de .NET. Si la aplicación host es de subprocesamiento múltiple y utiliza ampliamente el grupo de subprocesos de .NET, puede agotar el grupo de subprocesos de .NET. Esto podría producir tiempos de espera cuando un servicio de persistencia intenta completar una transacción de persistencia porque los objetos Transaction también utilizan el grupo de subprocesos de .NET.

Consulte también

Conceptos

Creación de WorkflowRuntime
Procesamiento de eventos WorkflowRuntime

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.