写书的那位大师丢三落四,代码没有拷贝完全,导致我花了些时间整理了这些代码,整理这些代码要感谢网上的一位老兄,可惜我不知道他的名字了。

今天在我的硬盘里发现了这些代码,决定发布上来共享。大家好才是真的好。

Code
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Remoting.Messaging;

namespace WF
{    
    public class Program
    {
        static void Main()
        {
            BookmarkManager mgr = new BookmarkManager();
            OpenSesame os = new OpenSesame();
            os.Start(mgr);
            mgr.Resume("read", null); 
            Console.WriteLine("Press any key to continue  ");
            Console.ReadKey();
        }        
    }

/// <summary>
    /// 书签类
    /// </summary>
    [Serializable]
    public class Bookmark
    {
        private string name;
        private object payload;
        private BookmarkLocation bookmarkLocation;
        private BookmarkManager bookmarkManager;
        public Bookmark(string name, BookmarkLocation continueAt)
        {
            this.name = name;
            this.bookmarkLocation = continueAt;
        }
        public string Name { get { return this.name; } }
        public BookmarkLocation ContinueAt { get { return this.bookmarkLocation; } }
        public object Payload { get { return this.payload; } set { this.payload = value; } }
        /// <summary>
        /// 书签位置属性
        /// </summary>
        public BookmarkManager BookmarkManager { get { return this.bookmarkManager; } set { this.bookmarkManager = value; } }
    }
    /// <summary>
    /// 书签位置(委托类型)
    /// </summary>
    /// <param name="resumed"></param>
    public delegate void BookmarkLocation(Bookmark resumed);

public class BookmarkManager
    {
        private delegate string AsyncReadLine();
        private IList<Bookmark> bookmarks;
        private int currentIndex = -1;
        public void Add(Bookmark bookmark)
        {
            if (this.bookmarks == null)
                this.bookmarks = new List<Bookmark>();
            bookmark.BookmarkManager = this;
            bookmarks.Add(bookmark);
        }
        public void Remove(Bookmark bookmark)
        {
            if (this.bookmarks != null && this.bookmarks.Count > 0)
                this.bookmarks.Remove(bookmark);
        }
        public void Resume(string bookmarkName, object payload)
        {
            foreach (Bookmark bk in this.bookmarks)
                if (bk.Name.Equals(bookmarkName) && bk.ContinueAt != null)
                {
                    this.currentIndex = this.bookmarks.IndexOf(bk);
                    BeginReadLine(new AsyncCallback(AsyncCallback), payload);
                }
        }
        private void AsyncCallback(IAsyncResult ar)
        {
            Bookmark bk = this.bookmarks[currentIndex];
            bk.Payload = EndReadLine(ar);
            bk.ContinueAt.Invoke(bk);
        }
        private IAsyncResult BeginReadLine(AsyncCallback asyncCallback, object state)
        {
            AsyncReadLine asyncReadLine = new AsyncReadLine(Console.ReadLine);
            return asyncReadLine.BeginInvoke(asyncCallback, state);
        }
        private string EndReadLine(IAsyncResult ar)
        {
            AsyncReadLine reader = (AsyncReadLine)((AsyncResult)ar).AsyncDelegate;
            return reader.EndInvoke(ar);
        }
    }

[Serializable]
    public class OpenSesame
    {
        private string key;
        public void Start(BookmarkManager mgr)
        {
            this.key = DateTime.Now.Millisecond.ToString();
            Console.WriteLine("Here is the key: {0}", key);
            mgr.Add(new Bookmark("read", this.ContinueAt));
        }
        private void ContinueAt(Bookmark resumed)
        {
            string s = (string)resumed.Payload;
            BookmarkManager mgr = resumed.BookmarkManager;
            mgr.Remove(resumed);
            if (this.key.Equals(s))
                Console.WriteLine("Welcome, my friends!");
            else
                Console.WriteLine("Sorry, you press a wrong key.");
        }
    }
}

转载于:https://www.cnblogs.com/zhonghua/archive/2008/08/18/1270248.html

WF本质论第一章的代码相关推荐

  1. 《整洁代码之道》学习书摘(二)第一章——整洁代码

    第一章 整洁代码 第一章 整洁代码 要有代码 糟糕的代码 混乱的代价 思想流派 我们是作者 童子军军规 前传与原则 小结 学习收获 要有代码 阅读本书(书摘)有两种原因,第一,你是个程序员:第二,你想 ...

  2. 《代码整洁之道》第一章 整洁代码 ---为什么需要整洁代码?

    第一章 整洁代码 概述 什么是整洁代码? 开始走向整洁代码 概述 欢迎阅读本栏目的读者,如果你想成为更加优秀的coder,请跟随笔者的观点去解析<代码整洁之道>这本书,相信你会收获颇丰. ...

  3. 学习笔记-第一章 恶意代码分析实战

    第一章 从可执行文件提取有用信息的多种方法,包括以下技术:1.使用反病毒软件来确认程序样本的恶意性:2.使用哈希来识别恶意代码:3.从文件的字符串列表,函数和文件头信息中发掘有用信息.字符串包括 AS ...

  4. python学习手册第一章部分代码练习

    def spliting(): print('-'*60) import math print(math.pi) # 3.141592653589793 print(math.sqrt(4)) # 2 ...

  5. 代码整洁之道读书笔记——第一章:整洁代码

    软件质量,不仅仅依赖于项目架构和项目管理,同样重要的是代码质量!!! 序 神在细节之中,其实干什么事都一样,从小到大,一直明白一个道理:细节决定成败! 软件架构在开发中占据重要地位.其次,宏达建筑的最 ...

  6. Beginning WF4读书笔计 - 第一章 03设计示图及xaml代码

    通过<Beginning WF4读书笔计 - 第一章 01创建一个简单的工作流>和<Beginning WF4读书笔计 - 第一章 02添加程序元素>的介绍后,本示例基本完成. ...

  7. 用Groovy思考 第一章 用Groovy简化Java代码

    用Groovy思考  第一章 用Groovy简化Java代码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 1. Groovy的安装 目前Groovy的 ...

  8. 第一行代码第一章——你的第一行Android代码

    第一行代码第一章-你的第一行Android代码 知识点目录 1.1 了解全貌--Android王国简介 * 1.1.1 Android系统架构 * 1.1.2 Android已发布的版本 * 1.1. ...

  9. 怎样写C代码——《狂人C》习题解答1(第一章习题7)

    自打小学开始,人们就被告知,做题之前应该先审题.这道理虽然很浅显,但却无比重要.     然而正是由于这道理过于浅显,所以总免不了被轻视--甚至被遗忘.人类历史上发生过无数次因为轻视简单浅显的道理而招 ...

最新文章

  1. 软件中的易用性设计及测试(三)之实践
  2. Oracle提示已连接到空闲的实例
  3. 深度学习100例-卷积神经网络(CNN)识别眼睛状态 | 第17天
  4. 部门角色权限rbac_k8s十 | 一文读懂基于角色的权限控制RBAC
  5. 微信小程序点击按钮实现弹出模态框
  6. 2.12日递推专题第一题
  7. Python 使用 smtp ssl 模式 发送邮件与附件
  8. 信号完整性与电源完整性分析_电源完整性,信号完整性,你说哪个更重要一点?...
  9. linux系统中db2创建表空间,为DB2数据库创建表空间
  10. Mysql like ' ' 会不会用到索引
  11. 汉密尔顿路径(哈密顿路径)解析
  12. python语义网络图_知识图谱之语义网络篇
  13. DOS批处理命令之for命令(批量安装APK)
  14. jvm软引用、强引用、虚引用简介
  15. canvas教程8-小球连线之碰壁则返
  16. 微信支付 V3 提示验签失败
  17. 生物信息学 陈铭_生物信息学Bioinformatics-山东大学课程中心.PDF
  18. BFS——1253 胜利大逃亡
  19. 平台搭建_记一次CTFd平台搭建
  20. 谁“偷”走了我的雨伞

热门文章

  1. python的json模块
  2. 【火炉炼AI】机器学习040-NLP性别判断分类器
  3. 北京公交“十三五”将通过大数据实现线路优化
  4. oracle新建用户,授权,建表空间语句
  5. 你愿意一辈子当一个打工的吗
  6. 把MSDE 2000 打包的自己的安装程序说明
  7. C# DataTable 用法简介
  8. Visual Studio中C++工程的环境配置方法
  9. Unit04 - 继承的意义(下) 、 访问控制 、 static和final
  10. .net IO异步和Producer/Consumer队列实现一分钟n次http请求