public class RaiseEventActivity : Activity
{
public class ThreadParameters
{
private IMyExternalDataExchangeService _service;
public IMyExternalDataExchangeService Service
{
get { return _service; }
set { _service = value; }
}
private Guid _workflowInstanceId;
public Guid WorkflowInstanceId
{
get { return _workflowInstanceId; }
set { _workflowInstanceId = value; }
}
public ThreadParameters(IMyExternalDataExchangeService service, Guid workflowInstanceId)
{
_service = service;
_workflowInstanceId = workflowInstanceId;
}
}
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
IMyExternalDataExchangeService service = executionContext.GetService<IMyExternalDataExchangeService>();
Thread thread = new Thread(new ParameterizedThreadStart(
delegate(object parameter)
{
ThreadParameters threadParameters = parameter as ThreadParameters;
MyEventArgs args = new MyEventArgs(threadParameters.WorkflowInstanceId);
args.WaitForIdle = true;
threadParameters.Service.RaiseEvent(args);
}));
thread.Start(new ThreadParameters(service, this.WorkflowInstanceId));
return ActivityExecutionStatus.Closed;
}
}