可以用两种方式启动工作流实例:通过工作流类型或者通过基于 XAML 的工作流标记。
若要通过工作流类型启动工作流实例,请调用 CreateWorkflow 方法并传入工作流的 System.Type,然后调用 Start。
Dim workflowInstance As WorkflowInstance
workflowInstance = workflowRuntime.CreateWorkflow(GetType(Workflow1))
workflowInstance.Start()
WorkflowInstance instance = workflowRuntime.CreateWorkflow
(typeof(WorkflowApplication.Workflow1));
instance.Start();
若要仅使用工作流标记启动工作流实例,请调用 CreateWorkflow 方法并传入 XmlReader(其中包含位于文件或流中的工作流定义),然后调用 Start。
Dim workflowInstance As WorkflowInstance
workflowInstance = workflowRuntime.CreateWorkflow(workflowDefinitionReader)
workflowInstance.Start()
WorkflowInstance instance = workflowRuntime.CreateWorkflow(workflowDefinitionReader);
instance.Start();
提示
如果将工作流标记文件与代码分隔文件一起使用,则必须将工作流类型传入 CreateWorkflow,而不是传入工作流标记文件。
默认情况下,工作流由 Windows 工作流运行时引擎异步启动。若要确保主机应用程序不会在工作流执行完毕之前关闭,必须使用由 .NET Framework 提供的同步线程对象,如 AutoResetEvent 对象。下面的代码示例演示如何创建和启动工作流运行时、如何启动工作流实例以及如何在 WorkflowRuntime 对象引发 WorkflowCompleted 事件时使用 AutoResetEvent 退出。
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 对于主机应用程序的执行环境没有任何限制。例如,某些主机应用程序环境可能要求多个进程在多个应用程序域中执行,每个进程都有其自己的与其他正在执行的进程无关的线程处理模型。这样,Windows Workflow Foundation 就可以在基础宿主体系结构发生变化时保持可移植性和可扩展性。
提示
Windows Workflow Foundation 使用 .NET 线程池。如果主机应用程序为多线程应用程序,并且大量使用 .NET 线程池,则可能使 .NET 线程池枯竭。由于 Transaction 对象也使用 .NET 线程池,因此这在持久性服务尝试完成持久性事务时会导致超时。
另请参见
概念
创建 WorkflowRuntime
处理 WorkflowRuntime 事件
版权所有 (C) 2007 Microsoft Corporation。保留所有权利。