Ausführen von Workflows
Workflowinstanzen können auf zwei Arten gestartet werden: Durch Workflowtypen oder durch XAML-basierte Workflowmarkups.
Rufen Sie zum Starten einer Workflowinstanz mithilfe eines Workflowtyps die CreateWorkflow-Methode auf, geben Sie den System.Type des Workflows ein, und rufen Sie dann Start auf.
Dim workflowInstance As WorkflowInstance
workflowInstance = workflowRuntime.CreateWorkflow(GetType(Workflow1))
workflowInstance.Start()
WorkflowInstance instance = workflowRuntime.CreateWorkflow
(typeof(WorkflowApplication.Workflow1));
instance.Start();
Rufen Sie zum Starten einer Workflowinstanz mithilfe eines Workflowmarkups die CreateWorkflow-Methode auf, geben Sie den XmlReader ein, der die Workflowdefinition entweder in einer Datei oder in einem Stream enthält, und rufen Sie dann Start auf.
Dim workflowInstance As WorkflowInstance
workflowInstance = workflowRuntime.CreateWorkflow(workflowDefinitionReader)
workflowInstance.Start()
WorkflowInstance instance = workflowRuntime.CreateWorkflow(workflowDefinitionReader);
instance.Start();
Tipp
Bei Verwendung der Workflowmarkupdatei mit einer Codetrennungsdatei muss der Workflowtyp in CreateWorkflow und nicht in die Workflowmarkupdatei eingegeben werden.
Standardmäßig werden Workflows asynchron vom Windows Workflow-Laufzeitmodul gestartet. Stellen Sie sicher, dass die Hostanwendung nicht geschlossen wird, bevor die Ausführung des Workflows abgeschlossen ist, indem Sie synchronisierende Threadingobjekte verwenden, die vom .NET Framework bereitgestellt werden, wie z. B. das AutoResetEvent-Objekt. Im folgenden Codebeispiel werden das Erstellen und das Starten der Workflowlaufzeit, das Starten einer Workflowinstanz und das Beenden mithilfe eines AutoResetEvent erklärt, wenn vom WorkflowRuntime-Objekt das WorkflowCompleted-Ereignis ausgelöst wird.
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();
}
}
Für die Windows Workflow Foundation bestehen keine Einschränkungen für die Ausführungsumgebung der Hostanwendung. Einige Hostanwendungsumgebungen erfordern beispielsweise, dass mehrere Prozesse in mehreren Anwendungsdomänen ausgeführt werden, von denen jeder unabhängig von den anderen Ausführungsprozessen über ein eigenes Threadingmodell verfügt. Auf diese Art bleibt Windows Workflow Foundation tragbar und erweiterbar, wenn sich zugrunde liegende Hostingarchitekturen ändern.
Tipp
Von Windows Workflow Foundation wird der .NET-Threadpool verwendet. Falls es sich bei der Hostanwendung um eine Multithreadanwendung handelt und der .NET-Threadpool häufig verwendet wird, wird der .NET-Threadpool möglicherweise blockiert. Dadurch könnten Timeouts verursacht werden, wenn von einem Persistenzdienst versucht wird, eine Persistenztransaktion abzuschließen, da der .NET-Threadpool auch von Transaction-Objekten verwendet wird.
Siehe auch
Konzepte
Erstellen von WorkflowRuntime
Verarbeiten von WorkflowRuntime-Ereignissen
Copyright © 2007 Microsoft Corporation. Alle Rechte vorbehalten.