Один из способов, который вы можете реализовать с помощью агрегатора событий, - это потребовать его как расширение для ваших действий рабочего процесса, например, следующее. В вашем WorkflowApplication/WorkflowInvoker вы можете зарегистрировать экземпляр агрегатора событий, чтобы ваши действия могли поднять события. Я не использовал агрегатор событий (пока) в моих приложениях, поэтому могут возникнуть некоторые причуды.
Пользовательские активность, что требует агрегатор событий и использует его в Execute методе:
namespace SampleWorkflowAppOne
{
using System.Activities;
using Microsoft.Practices.Prism.Events;
public class PurchaseOrderInventoryCheckActivity : NativeActivity
{
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
metadata.RequireExtension<IEventAggregator>();
}
protected override void Execute(NativeActivityContext context)
{
var eventAggregator = context.GetExtension<IEventAggregator>();
var somethingHappenedEvent = eventAggregator.GetEvent<MyActivityEvent>();
var myEventInfo = new MyEventInfo() { SomeNumber = 5 };
somethingHappenedEvent.Publish(myEventInfo);
}
}
public class MyActivityEvent : CompositePresentationEvent<MyEventInfo>
{
}
public class MyEventInfo
{
public int SomeNumber { get; set; }
}
}
Регистрация экземпляра агрегатор событий для использования в своей деятельности:
using System;
using System.Linq;
using System.Activities;
using System.Activities.Statements;
namespace SampleWorkflowAppOne
{
using Microsoft.Practices.Prism.Events;
class Program
{
static void Main(string[] args)
{
var purchaseOrderValidationWorkflow = new PurchaseOrderValidationWorkflow();
var eventAggregator = new EventAggregator();
var wfInvoker = new WorkflowInvoker(purchaseOrderValidationWorkflow);
wfInvoker.Extensions.Add(eventAggregator);
wfInvoker.Invoke();
}
}
}
Надежда, что помогает.
EDIT: Я нашел это видео, в котором показано создание события с длинным рабочим циклом, который может также помочь. Я еще не смотрел его: http://channel9.msdn.com/Events/Build/BUILD2011/TOOL-801T
Они могут быть вызваны с помощью EventAggregator, но Windows Workflow Foundation не создан для предоставления вам системы событий. Можете ли вы дать более конкретное объяснение того, что вы действительно пытаетесь выбраться из WF? Как диаграмма Visio потока, который вы хотите? –