1.workflowruntime启动了持久化和监听服务
2.workfllowruntime创建多个实例,并启动,一些会长时间延时,一些会中途暂停,会不同的执行状态(业务状态)
3.另有一winform控制台,有个表格,刷新显示每个实例的信息,包括业务状态--比如创建,运行,挂起等
4.通过workflowruntime.GetLoadedWorkflows()方法取得所有实例,但却没有办法得到正确的业务状态
当然,当将实例unload,再load后(实例回写到数据库),通过SqlTrackingQuery查询得到SqlTrackingWorkflowInstance.Status是可以.可是实际上,不可能一刷新实例表格就要将实例unload.所以,在想有没有办法在workflowruntime平台上,获取实例的业务状态.
决定自己写个类,解决这个问题,思路如下:
1.在宿主中构建Dictionary<Guid, TrackingStatus>,用于维护instance状态
2.预订workflowruntime与instance相关的事件
3.在事件处理方法中更新instance对应的trackingstatus
4.定义event WorkflowStatusChangeEventHandler WorkflowStatusChanged事件,以便状态变化时处理
两个类:
使用方便:
trackingworkflowevent = new TrackingWorkflowEvent(workflowRuntime); //创建
trackingworkflowevent.TackEvent(); //预订事件
trackingworkflowevent.GetWorkflowStatus(instance); //获取instance状态
trackingworkflowevent.UntackEvent(); //卸载事件
trackingworkflowevent.Dispose(); //消毁
trackingworkflowevent.TackEvent(); //预订事件
trackingworkflowevent.GetWorkflowStatus(instance); //获取instance状态
trackingworkflowevent.UntackEvent(); //卸载事件
trackingworkflowevent.Dispose(); //消毁