Partager via


Exécution des workflows

Les instances de workflow peuvent être démarrées de deux manières : via les types de workflow ou la balise de workflow basée sur le langage XAML.

Pour démarrer une instance de workflow à l'aide d'un type de workflow, appelez la méthode CreateWorkflow, en passant le System.Type du workflow, puis appelez Start.

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

Pour démarrer uniquement une instance de workflow à l'aide de la balise de workflow, appelez la méthode CreateWorkflow, en passant le XmlReader qui contient la définition de workflow dans un fichier ou un flux, puis appelez Start.

Dim workflowInstance As WorkflowInstance
workflowInstance = workflowRuntime.CreateWorkflow(workflowDefinitionReader)
workflowInstance.Start()
WorkflowInstance instance = workflowRuntime.CreateWorkflow(workflowDefinitionReader);
instance.Start();
Bb924456.note(fr-fr,VS.90).gifRemarque :
Si vous utilisez un fichier de balisage de workflow avec un fichier de séparation de code, vous devez passer le type de workflow dans CreateWorkflow au lieu de passer le fichier de balisage de workflow.

Par défaut, les workflows sont démarrés de façon asynchrone par le moteur d'exécution Windows Workflow. Pour vous assurer que votre application hôte ne se ferme pas avant que votre workflow ait terminé de s'exécuter, vous devez utiliser les objets de thread de la synchronisation fournis par le .NET Framework, tels que l'objet AutoResetEvent. L'exemple de code suivant indique comment créer et démarrer l'exécution du workflow, démarrer une instance de workflow et la quitter en utilisant un AutoResetEvent lorsque l'objet WorkflowRuntime déclenche l'événement 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 n'a pas de restrictions sur l'environnement d'exécution de l'application d'hébergement. Par exemple, certains environnements d'application hôtes peuvent requérir que plusieurs processus s'exécutent dans plusieurs domaines d'application, chacun avec son propre modèle de thread indépendant des autres processus s'exécutant. De cette manière, Windows Workflow Foundation reste mobile et extensible lorsque les architectures d'hébergement sous-jacentes changent.

Bb924456.note(fr-fr,VS.90).gifRemarque :
Windows Workflow Foundation utilise le pool de threads .NET. Si votre application hôte est multithread et utilise largement le pool de threads .NET, vous pouvez retarder l'exécution du pool de threads .NET. Ceci peut entraîner des délais d'attente lorsqu'un service de persistance essaie d'effectuer une transaction car les objets Transaction utilisent également le pool de threads .NET.

Voir aussi

Concepts

Création du WorkflowRuntime
Traitement d'événements WorkflowRuntime

Copyright © 2007 par Microsoft Corporation. Tous droits réservés.