VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Objective-C编程 >
  • 坚持学习WF12 EventHandingScopeActivity活动

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  EventHandlingScopeActivity活动包含一个主线子活动和一组事件处理活动(EventHandlersActivity),它的主线子活动中只能包含一个子活动。它会执行其主子活动比如SequenceActivity。 同时,可能会执行每个EventDrivenActivity,也可能不执行它们,这取决于在SequenceActivity 活动执行时是否发生了它们的事件,当主线活动执行完了整个EventHandlingScopeActivity活动也就结束了。

  下面以例子来说明该活动的使用:

  1.定义服务接口:

[ExternalDataExchange]
public interface IScopeDemo
{    
   void Started();
   event EventHandler<ExternalDataEventArgs> EventOne;
   event EventHandler<ExternalDataEventArgs> EventTwo;
   event EventHandler<ExternalDataEventArgs> EventStop;
}

  1.1.Started()方法会在工作流开始的时候调用。

  1.2.其他三个事件会在HandleExternalEventActivity实例中调用。

  2.实现服务接口:

class ScopeDemoService:IScopeDemo
{
  private Guid instanceId;  
  public void Started()
  {      
    instanceId = WorkflowEnvironment.WorkflowInstanceId;
  }
  public event EventHandler<ExternalDataEventArgs> EventOne;
  public event EventHandler<ExternalDataEventArgs> EventTwo;
  public event EventHandler<ExternalDataEventArgs> EventStop; 
  public void OnEventOne()
  {
    if (EventOne != null)
    {
      EventOne(null, new ExternalDataEventArgs(instanceId));
    }
  }
  public void OnEventTwo()
  {
    if (EventTwo != null)
    {
      EventTwo(null, new ExternalDataEventArgs(instanceId));
    }
  }
  public void OnEventStop()
  {
    if (EventStop != null)
    {
      EventStop(null, new ExternalDataEventArgs(instanceId));
    }
  }
}

 

  3.实现工作流,如下图:

坚持学习WF(12):使用EventHandlingScopeActivity活动

  3.1.在主线子活动中使用CallExternalMethodActivity活动调用Started方法。

  3.2.WhileActivity的条件为!this.IsComplete,当IsComplete为true的时候结束。

  3.3.在事件处理活动中我们添加三各EventDriven,每个EventDriven中添加一个HandleExternalEventActivity来

  分别调用EventOne,EventTwo和EventStop事件。

  工作的完整代码如下:

public sealed partial class ScopeDemoWorkflow: SequentialWorkflowActivity
{
   public ScopeDemoWorkflow()
   {
  InitializeComponent();
   }
   private Boolean isComplete = false;
   public Boolean IsComplete
   {
    get { return isComplete; }
    set { isComplete = value; }
   }
   private void codeActivity1_ExecuteCode(object sender, EventArgs e)
   {
    Console.WriteLine("正在执行主线子活动.....");
   }
   private void handleExternalEventActivity1_Invoked(object sender, ExternalDataEventArgs e)
   {
    Console.WriteLine("事件响应一");
   }
   private void handleExternalEventActivity2_Invoked(object sender, ExternalDataEventArgs e)
   {
    Console.WriteLine("事件响应二");
   }
   private void handleExternalEventActivity3_Invoked(object sender, ExternalDataEventArgs e)
   {
    Console.WriteLine("事件响应结束");
    IsComplete = true;
   }
}

 

  4.下面来些测试类,代码如下:

public class ScopeTest
{
  private static ScopeDemoService scopeService;
  public static void Run()
  {
    using (WorkflowRuntimeManager manager = new WorkflowRuntimeManager(new WorkflowRuntime()))
    {       
      AddServices(manager.WorkflowRuntime);
      manager.WorkflowRuntime.StartRuntime();       
      Console.WriteLine("开始执行工作流.....");
      manager.StartWorkflow(typeof(CaryScope.ScopeDemoWorkflow), null);
      //让主线子活动执行
       Thread.Sleep(2000);       
      scopeService.OnEventOne();
      Thread.Sleep(100);    
      scopeService.OnEventTwo();
      Thread.Sleep(100);
      //主线子活动执行
       Thread.Sleep(3000);
      //停止工作流
       scopeService.OnEventStop();
      manager.WaitAll(10000);
      Console.WriteLine("完成工作流...nr");
    }
   }   
  private static void AddServices(WorkflowRuntime instance)
  {      
      ExternalDataExchangeService exchangeService = new ExternalDataExchangeService();
      instance.AddService(exchangeService);      
      scopeService = new ScopeDemoService();
      exchangeService.AddService(scopeService);
  }
}

 

  5.执行结果如下图所示:

坚持学习WF(12):使用EventHandlingScopeActivity活动

  注意:如果EventHandlingScopeActivity活动的主线子活动执行完成时,已被触发的EventDriven不会因为主线子活动的完成而终止,而是会继续执行完成。

 

 

  3.实现工作流,如下图:

坚持学习WF(12):使用EventHandlingScopeActivity活动

  3.1.在主线子活动中使用CallExternalMethodActivity活动调用Started方法。

  3.2.WhileActivity的条件为!this.IsComplete,当IsComplete为true的时候结束。

  3.3.在事件处理活动中我们添加三各EventDriven,每个EventDriven中添加一个HandleExternalEventActivity来

  分别调用EventOne,EventTwo和EventStop事件。

  工作的完整代码如下:

public sealed partial class ScopeDemoWorkflow: SequentialWorkflowActivity
{
   public ScopeDemoWorkflow()
   {
  InitializeComponent();
   }
   private Boolean isComplete = false;
   public Boolean IsComplete
   {
    get { return isComplete; }
    set { isComplete = value; }
   }
   private void codeActivity1_ExecuteCode(object sender, EventArgs e)
   {
    Console.WriteLine("正在执行主线子活动.....");
   }
   private void handleExternalEventActivity1_Invoked(object sender, ExternalDataEventArgs e)
   {
    Console.WriteLine("事件响应一");
   }
   private void handleExternalEventActivity2_Invoked(object sender, ExternalDataEventArgs e)
   {
    Console.WriteLine("事件响应二");
   }
   private void handleExternalEventActivity3_Invoked(object sender, ExternalDataEventArgs e)
   {
    Console.WriteLine("事件响应结束");
    IsComplete = true;
   }
}


相关教程