WF本质论第一章的代码
写书的那位大师丢三落四,代码没有拷贝完全,导致我花了些时间整理了这些代码,整理这些代码要感谢网上的一位老兄,可惜我不知道他的名字了。
今天在我的硬盘里发现了这些代码,决定发布上来共享。大家好才是真的好。
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本质论第一章的代码相关推荐
- 《整洁代码之道》学习书摘(二)第一章——整洁代码
第一章 整洁代码 第一章 整洁代码 要有代码 糟糕的代码 混乱的代价 思想流派 我们是作者 童子军军规 前传与原则 小结 学习收获 要有代码 阅读本书(书摘)有两种原因,第一,你是个程序员:第二,你想 ...
- 《代码整洁之道》第一章 整洁代码 ---为什么需要整洁代码?
第一章 整洁代码 概述 什么是整洁代码? 开始走向整洁代码 概述 欢迎阅读本栏目的读者,如果你想成为更加优秀的coder,请跟随笔者的观点去解析<代码整洁之道>这本书,相信你会收获颇丰. ...
- 学习笔记-第一章 恶意代码分析实战
第一章 从可执行文件提取有用信息的多种方法,包括以下技术:1.使用反病毒软件来确认程序样本的恶意性:2.使用哈希来识别恶意代码:3.从文件的字符串列表,函数和文件头信息中发掘有用信息.字符串包括 AS ...
- python学习手册第一章部分代码练习
def spliting(): print('-'*60) import math print(math.pi) # 3.141592653589793 print(math.sqrt(4)) # 2 ...
- 代码整洁之道读书笔记——第一章:整洁代码
软件质量,不仅仅依赖于项目架构和项目管理,同样重要的是代码质量!!! 序 神在细节之中,其实干什么事都一样,从小到大,一直明白一个道理:细节决定成败! 软件架构在开发中占据重要地位.其次,宏达建筑的最 ...
- Beginning WF4读书笔计 - 第一章 03设计示图及xaml代码
通过<Beginning WF4读书笔计 - 第一章 01创建一个简单的工作流>和<Beginning WF4读书笔计 - 第一章 02添加程序元素>的介绍后,本示例基本完成. ...
- 用Groovy思考 第一章 用Groovy简化Java代码
用Groovy思考 第一章 用Groovy简化Java代码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 1. Groovy的安装 目前Groovy的 ...
- 第一行代码第一章——你的第一行Android代码
第一行代码第一章-你的第一行Android代码 知识点目录 1.1 了解全貌--Android王国简介 * 1.1.1 Android系统架构 * 1.1.2 Android已发布的版本 * 1.1. ...
- 怎样写C代码——《狂人C》习题解答1(第一章习题7)
自打小学开始,人们就被告知,做题之前应该先审题.这道理虽然很浅显,但却无比重要. 然而正是由于这道理过于浅显,所以总免不了被轻视--甚至被遗忘.人类历史上发生过无数次因为轻视简单浅显的道理而招 ...
最新文章
- 软件中的易用性设计及测试(三)之实践
- Oracle提示已连接到空闲的实例
- 深度学习100例-卷积神经网络(CNN)识别眼睛状态 | 第17天
- 部门角色权限rbac_k8s十 | 一文读懂基于角色的权限控制RBAC
- 微信小程序点击按钮实现弹出模态框
- 2.12日递推专题第一题
- Python 使用 smtp ssl 模式 发送邮件与附件
- 信号完整性与电源完整性分析_电源完整性,信号完整性,你说哪个更重要一点?...
- linux系统中db2创建表空间,为DB2数据库创建表空间
- Mysql like ' ' 会不会用到索引
- 汉密尔顿路径(哈密顿路径)解析
- python语义网络图_知识图谱之语义网络篇
- DOS批处理命令之for命令(批量安装APK)
- jvm软引用、强引用、虚引用简介
- canvas教程8-小球连线之碰壁则返
- 微信支付 V3 提示验签失败
- 生物信息学 陈铭_生物信息学Bioinformatics-山东大学课程中心.PDF
- BFS——1253 胜利大逃亡
- 平台搭建_记一次CTFd平台搭建
- 谁“偷”走了我的雨伞