`

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

阅读更多

[置顶]坚持学习WF文章索引

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.实现工作流,如下图:
scope1 
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("完成工作流...\n\r");
        }
     }       
    private static void AddServices(WorkflowRuntime instance)
    {            
            ExternalDataExchangeService exchangeService = new ExternalDataExchangeService();
            instance.AddService(exchangeService);            
            scopeService = new ScopeDemoService();
            exchangeService.AddService(scopeService);
    }
}
5.执行结果如下图所示:
scope2 

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

分享到:
评论

相关推荐

    坚持学习WF,WF学习教程

    坚持学习WF(12):使用EventHandlingScopeActivity活动 EventHandlingScopeActivity活动包含一个主线子活动和一组事件处理活动(EventHandlersActivity),它的主线子活动中只能包含一个子活动。它会执行其主子活动比如...

    WF教程_坚持学习WF

    坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty) 坚持学习WF(5):自定义活动(CustomActivity) 4.5两篇对主要对活动(Actibity)的介绍和依赖属性(DependencyObject)和DependencyProperty事件的使用。 ...

    坚持学习WF

    坚持学习WF(12):使用EventHandlingScopeActivity活动 EventHandlingScopeActivity活动包含一个主线子活动和一组事件处理活动(EventHandlersActivity),它的主线子活动中只能包含一个子活动。它会执行其主子活动比如...

    坚持学习WF(1):从HelloWorld开始 源码

    在本篇“坚持学习WF(1):从HelloWorld开始”的源码分析中,我们将深入理解WF的基础知识和创建第一个工作流的步骤。 首先,让我们了解WF的基本概念。WF提供了一种模型化业务流程的方式,通过活动(Activities)来表示...

    坚持学习WF(5):自定义活动(CustomActivity) 源码

    在Windows Workflow Foundation (WF)中,自定义活动(CustomActivity)是开发人员根据特定业务需求创建的自定义工作流组件。本篇文章将深入探讨如何利用C#编程语言创建自定义活动,并通过源码分析来理解其工作原理。...

    wf工作流资料<转自网上的笔记>

    "坚持学习WF(12)使用EventHandlingScopeActivity活动"更进一步,专门讲解EventHandlingScopeActivity,这是一种处理多个事件的容器活动。 "坚持学习WF(15)状态机工作流"介绍了状态机模型,这是一种常见于状态变化...

    WF4 自定义容器活动

    自定义容器活动是在WF4中创建自己的复合活动,可以包含其他活动,类似于在流程图中使用一个形状来封装多个子步骤。下面我们将深入探讨如何实现WF4自定义容器活动,并在自定义活动中添加其他活动。 一、理解WF4...

    Microsoft WF 活动实例

    本教程针对WF初学者,将深入探讨WF中的各种活动及其使用实例。 ### 一、WF基础概念 1. **活动(Activity)**: 在WF中,活动是最基本的构建块,代表了工作流中的一个操作或一组操作。活动可以是内置的,如顺序执行...

    Apress - Beginning WF: Windows Workflow in .NET 4.0 Mar 2010

    本书《Beginning WF: Windows Workflow in .NET 4.0》是一本详细介绍如何在.NET 4.0环境中使用Windows Workflow Framework(WF)进行应用开发的专业指南。本书由Mark J. Collins撰写,于2010年3月19日由Apress出版社...

    WF从入门到精通(第十三章):打造自定义活动(一)源码

    6. **发布和使用**:完成自定义活动后,可以将其打包成.dll文件,然后在其他WF项目中引用。这样,自定义活动就可供整个团队使用,提高了代码复用和一致性。 在"Chapter13"压缩包文件中,很可能是包含了本章的所有源...

    WF工作流学习资料

    3. **WF活动**:WF的核心是活动,它们是工作流中的最小执行单元。活动可以是内置的,如If条件判断、Assign赋值,也可以是自定义的,满足特定业务需求。活动可以通过组合和嵌套形成复杂的工作流逻辑。 4. **WF生命...

    WF40 实战:实现自动访问网站机器人.doc

    本文介绍了使用 WF4.0 实现自动访问网站机器人的方法,通过四个流程,实现机器人登录、机器人回帖、机器人推荐文章、机器人定时回帖和机器人定时推荐文章等功能。文章还提供了详细的代码实现和流程图,供读者参考。 ...

    (2007 Apress)Pro WF Windows Workflow in .NET3.0.pdf

    - **示例1:订单处理**:使用WF设计一个订单处理工作流,包括接收订单、库存检查、发货通知等多个步骤。 - **示例2:请假申请审批**:构建一个请假申请的审批流程,涉及提交申请、部门经理审批、人力资源审核等环节...

    pro wf windows workflow in dot net 3.5

    2. **活动设计**:详细讲解了如何设计自定义活动,包括使用代码活动、XAML活动,以及复合活动。这涵盖了从简单的控制流程活动到复杂的业务规则活动的创建方法。 3. **工作流生命周期**:涵盖工作流的创建、启动、...

    WF学习从入门到提高

    例如,你可能会学习如何在Visual Studio中创建第一个WF项目,如何使用各种内置活动,以及如何处理错误和异常。随着深入,你可能还会接触到高级主题,如自定义活动的开发,工作流服务(WCF Workflow Services)的实现...

    【翻译】WF从入门到精通(第一章):WF简介源代码下载

    1. **活动设计**:理解如何定义和使用内置及自定义活动。 2. **工作流设计**:学习如何组合活动创建工作流,包括顺序、状态机、事务和并行工作流。 3. **工作流服务**:如果打算集成WF到WCF(Windows Communication ...

    Beginning WF Windows Workflow in .NET 4.0

    《在.NET 4.0中开始使用WF Windows工作流》一书由Mark J. Collins撰写,深入探讨了在.NET框架4.0版本中如何利用Windows Workflow(WF)技术来构建和管理复杂的工作流程。该书作为一本入门指南,旨在帮助读者理解和...

    爱普生WF7710说明书.pdf

    爱普生WF7710说明书是关于爱普生WF7710打印机的使用手册,涵盖了打印机的基本操作、网络设置、安全警告等方面的内容。 基本使用 在使用爱普生WF7710打印机之前,需要了解打印机的基本组件和功能。包括控制面板、...

    WF从入门到精通(第七章):基本活动的操作源码

    除了使用内置的基本活动外,WF还允许开发者创建自定义活动,以满足特定的业务需求。通过查看和分析提供的源码,你可以学习如何扩展WF,定义自己的活动类,并集成到工作流程中。 5. **活动设计与执行** 学习如何在...

Global site tag (gtag.js) - Google Analytics