`

WF4.0 Beta1之旅(4):Bookmark的使用

阅读更多

相关文章:

WF4.0 Beta1之旅(1):基本介绍
WF4.0 Beta1之旅(2):异常处理
WF4.0 Beta1之旅(3):全新的FlowChart

WF4.0中加入了书签(Bookmark)机制,可以让活动在书签的位置挂起,等待恢复。如果我们需要在活动没有完成的时候,提供额外的数据,这个时候我
们就可以给活动注册一个书签,我们需要使用CreateNamedBookmark方法创建书签,该方法有三个参数一个名字,一个BookmarkCallback的委托,当
活动恢复的时候执行。和BookmarkOptions,Runtime为每个工作流实例维护一个Bookmarks的Table,每次有Bookmark要恢复的时候都回去check。

1.下面我们就创建一个这样的自定义活动,Read.cs,代码如下:

using System;
using System.Activities;

public sealed class Read<T> : NativeActivity<T>
{
    public Read() : base()
    {
    }
    public string BookmarkName { get; set; }

    protected override void Execute(ActivityExecutionContext context)
    {
        context.CreateNamedBookmark(this.BookmarkName, new BookmarkCallback(this.Continue));
    }

    void Continue(ActivityExecutionContext context, Bookmark bookmark, object obj)
    {
        this.Result.Set(context, (T)obj);
    }
}

2.设计工作流

工作流中包含一个Parallel和一个WriteLine,工作流中的变量如下:

Name:x type:String scope:Sequence

Name:y type:String scope:Sequence

Bookmark1

Parallel中有两个Read活动,两个read活动的BookmarkName属性为x,y。Result属性也为x,y

Bookmark2

3.宿主程序如下:

namespace Bookmarks
{
    using System;
    using System.Linq;
    using System.Threading;
    using System.Activities;
    using System.Activities.Statements;
    using System.Collections;

    class Program
    {
        static void Main(string[] args)
        {
            ManualResetEvent completionEvent = new ManualResetEvent(false);
            AutoResetEvent idleEvent = new AutoResetEvent(false);

            WorkflowInstance instance = new WorkflowInstance(new Sequence1());
            instance.OnIdle += delegate
            {
                idleEvent.Set();
                return IdleAction.Nothing;
            };
            instance.OnCompleted += delegate
            {
                completionEvent.Set();
            };

            instance.Run();

            bool lastBookmark = false;
            while (!lastBookmark)
            {
                idleEvent.WaitOne();

                IList bookmarks = instance.GetAllBookmarks();
                if (bookmarks == null || bookmarks.Count == 0)
                {
                    break;
                }

                lastBookmark = (bookmarks.Count == 1);

                while (true)
                {
                    Console.Write("Bookmarks:");
                    foreach (BookmarkInfo info in bookmarks)
                    {
                        Console.Write(" '" + info.BookmarkName + "'");
                    }
                    Console.WriteLine();
                    Console.WriteLine("输入要恢复的书签名");
                    string name = Console.ReadLine();
                    Console.WriteLine("输入传入的数据 '{0}'", name);
                    string str = Console.ReadLine();

                    try
                    {
                        instance.ResumeBookmark(name, str);
                        break;
                    }
                    catch (BookmarkNotFoundException e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
            }

            completionEvent.WaitOne();
            Console.WriteLine("Press enter to exit");
            Console.ReadLine();
        }
    }
}

通过 IList bookmarks = instance.GetAllBookmarks();获得所有书签。

通过instance.ResumeBookmark(name, str);恢复活动的执行。

4.结果如下:

Bookmark3

分享到:
评论

相关推荐

    一个利用WF4.0多书签模拟简单会签的例子

    本例子旨在演示如何使用WF4.0的多书签功能来模拟简单的会签过程,会签在业务流程中常见于多个参与者需要对同一份文档或请求进行审批的情况。 会签过程通常涉及多个步骤和角色,每个角色都需要查看、评估并批准或...

    WF4.0利用书签实现动态调子流程的例子

    在这个例子中,我们将探讨如何利用WF4.0中的“书签”(Bookmark)功能来实现动态调用子流程的功能。 书签在WF4.0中扮演着重要的角色,它允许工作流在执行到特定点时暂停,并在稍后恢复。这就像阅读一本书时放置的...

    WF 4.0 之持久化操作

    ### WF 4.0 之持久化操作 #### 概述 在工作流(WF)领域,特别是针对WF 4.0版本的理解中,“WF 4.0 之持久化操作”这一主题聚焦于如何有效地将工作流的状态保存下来,以便在后续的操作中能够继续执行。持久化操作...

    AdobeReader 书签插件:bookmark_page.js

    Adobe Reader 书签插件:插件是一个JS文件,下载后将.js文件复制到软件安装目录JavaScript文件夹下,参考C:\Program Files (x86)\Adobe\Reader 11.0\Reader\Javascripts\bookmark_page.js

    Bookmark4U v2.0.0 汉化版

    1. **云存储**:Bookmark4U的核心特性是其云存储功能。这意味着用户的书签不再局限于特定设备,而是可以通过互联网在任何地方访问。用户只需要登录他们的账户,就能访问自己的书签库,这大大提升了跨设备使用的便利...

    holbertonschool-interview:面试等挑战

    :bookmark_tabs: :bookmark_tabs: :bookmark_tabs: :bookmark_tabs: :bookmark_tabs: :bookmark_tabs: :bookmark_tabs: :bookmark_tabs: :bookmark_tabs: :bookmark_tabs: :bookmark_tabs: :...

    NET4.5中状态机工作流[归纳].pdf

    .NET 4.5 中的状态机工作流是工作流基础(WF)的一种实现方式,WF 4.0 中已经提供了状态机模式的支持。在 WF 设计界面中,可以看到状态机模板由三个 Activity 组成:StateMachin、State 和 FinalState。这三个 ...

    kanbang:面向开发人员的最小,干净,直观的看板! :bookmark::bookmark:https

    KanbanG只是开发人员个人使用的另一个任务跟踪器。 现在它提供了什么? 好吧,它提供了: 根据需要创建任意数量的仪表板! 根据需要创建任意数量的跟踪列(例如,待办事项,进行中,完成等。) 为每列创建“ n”...

    :bookmark_tabs: 用于创建 React 组件演示的 CLI 工具

    React DemoTab CLI :bookmark_tabs: 轻松创建 React 组件的演示 单独维护示例代码和演示会很痛苦,很容易使它们不同步:person_gesturing_NO: 代码不能撒谎,演示代码可以 :collision: DemoTab CLI 使您的代码与演示...

    bookmark4u 多国语言版(网络书签系统)

    1. **多语言支持**:bookmark4u 的多语言界面是其一大亮点,为不同国家和地区的用户提供熟悉的使用环境,便于理解和操作。用户可以根据自己的语言偏好选择相应的界面,提升用户体验。 2. **书签管理**:用户可以...

    web-performance-studies:网络性能研究

    :bookmark_tabs: 文章 :bookmark_tabs: 视频 :bookmark_tabs: 视频 :movie_camera: 视频 :bookmark_tabs: 文章 :bookmark_tabs: 文章 :bookmark_tabs: 文章 :bookmark_tabs: 文章 :bookmark_tabs: ...

    linux-tools:记录各种Linux工具:penguin::bookmark_tabs:

    标题中的“penguin::bookmark_tabs:”可能是一种符号化表达,暗示着这个项目是关于Linux(通常用企鹅作为它的吉祥物)的收藏夹或书签集合,用于组织和访问不同的Linux工具信息。 描述简单明了,表明这个项目是作者...

    ftp-node::bookmark_tabs:使用Node FTP包的示例代码

    在本文中,我们将深入探讨如何使用Node.js中的`ftp`包进行FTP(文件传输协议)操作,特别是关于“ftp-node::bookmark_tabs”的示例代码。FTP是一种标准的网络协议,用于在服务器和客户端之间上传、下载文件。在Node....

    recursos-gratuitos::rainbow:Umacoleçãocom links de recursos gratuitos para desenvolvimentos e estudos

    切换到英文: 坎比亚人: 切换到中文: Uma coisa que eu semper fico emdúvidana ... :bookmark: :bookmark: :bookmark: :bookmark: :bookmark: :bookmark: :bookmark: :bookmark: :books: nd迪斯 :bookmark:

    TLL::bookmark_tabs:今天林学到了

    - **诞生背景**:多标签浏览功能始于Netscape Communicator 4.x的“多窗口”概念,后来在Firefox和Chrome等浏览器中得到广泛推广。 - **工作方式**:每个标签对应一个独立的浏览会话,用户可以同时打开多个网页而...

    notions:关于最常见主题的课程和实践表

    观念 该资料库包含有关...tabs::bookmark_tabs:单元测试-在Java中使用:bookmark_tabs:未定义类型的列表-从抽象到通用级别:bookmark_tabs:在Java异常 Python :bookmark_tabs:入门套件:bookmark_tabs:语言:bookmark_tabs:

    suboptimaleng.github.io::bookmark:Gridsome Blog 1.0

    【标题】"suboptimaleng.github.io::bookmark:Gridsome Blog 1.0" 指的是一款基于Gridsome框架构建的个人博客系统,版本为1.0。Gridsome是一款现代的静态网站生成器,它利用Vue.js的强大功能,提供快速、高效的网页...

    :bookmark_tabs: 一个 React 组件,可以轻松创建其他组件的演示

    React DemoTab :bookmark_tabs: 一个 React 组件,可以轻松创建其他组件的演示 安装 npm install react-demo-tab Demo DemoTab 示例 Example import React from 'react'; 从 'react-dom' 导入 ReactDOM; 从'react-...

    react-demo-tab-cli::bookmark_tabs:用于创建React组件演示的CLI工具

    ReactDemoTab CLI :bookmark_tabs: 轻松创建React组件的演示分别维护示例代码和演示很麻烦,很容易使它们不同步 :person_gesturing_NO: 代码不能撒谎,演示代码可以撒谎 :collision: DemoTab CLI通过演示使您的代码...

    GutenTag::bookmark:Guten Tag –一个用于标记您的字形的字形插件

    :bookmark: 古登标签 这是的插件。 它允许您从字体视图和编辑视图中编辑字形标记。 特征 从字体视图和编辑视图查看和编辑标签。 使用自动补全功能可防止在标签名称中输入错误。 通过单击标签右侧的小显示按钮来...

Global site tag (gtag.js) - Google Analytics