WF本质论 读书心得 2 WF程序 上
2008-02-25 20:21
253 查看
1.Activity,即可恢复语句组件,一组Activity组成了WF工作流
所有的活动都派生自System.Workflow.ComponentModel.Activity类,都要重载Execute()方法来定义活动的执行逻辑。
Activity派生自DependObject(后者提供依赖属性DependProperty,见第7章)
Activity的Enabled属性,表明是否被禁用(可以认为mark了若干语句)。这个属性决定了复合活动CompositeActivity的EnabledActivities属性。
Activity的Name属性是活动的标志。
Activity的Parent属性指明了上一级的复合活动
重载的AES Execute(AEC context)方法是非常重要的,执行逻辑全都封装在这里。通过上下文context传递的信息,执行当前Activity的逻辑,最后返回一个状态:没有书签(即没有回调方法ContinueAt),就返回AES.Closed;否则返回AES.Executing,表示还在等待异步执行结果。还有,这是一个protected internal方法,所以只有context.ExecuteActivity(activity)可以间接调用这个方法。
异步回调ContinueAt(object sender, QueueEventArgs e);
注意,子活动使用的是QueueEventArgs(这个类中仅有一个QueueName属性)
WorkflowQueuingService类和WorkflowQueue类,其实就是上一章的BookmarkManager和Bookmark。WorkflowQueuingService是维持着WorkflowQueue的集合,而WorkflowQueue这个队列则是用来存取数据的,
WorkflowQueue的QueueItemAvailable事件则是上一章的BookmarkLocation,表示收到了外部信号——我猜测,因为WorkflowQueue有一个Enqueue(object item)方法,在进队过程中(也就是外部输入),激发了这个QueueItemAvailable事件,从而引发异步ContinueAt回调。
PrintKey活动与ReadLine活动,分别展示了无书签和有书签两种WF编程模型。
AEC在这里的作用:提供mgr书签管理器。
2.复合活动CompositeActivity
所有活动形成一棵树,每个子活动只能属于一个复合活动,跟活动的parent=null
观察Sequence这个顺序流,是{}的功能再现。这里用到了Activity的Closed事件:并将异步ContinueAt绑在上面。随着context.ExecuteActivity(activity)执行完子活动,在这个方法中会同时激发Closed事件(同时把activity传递给OnClosed的参数e.Activity),从而恢复了书签ContinueAt。而书签ContinueAt中重复着这套逻辑,就这样一直迭代下去,直到结束。
还有,就是这个异步回调ContinueAt(object sender, AESChangedEventArgs e); 使用的是AESChangedEventArgs类,这个类有3个参数,当前我们只使用到了其中的Activity属性
AEC在这里的作用:间接执行Activity的方法,推动其Status的变化
3.WF的XAML表示
以xoml为扩展名
<Sequence xmlns="http://EssentialWF/Activities">
<Print />
<Print />
</Sequence>
等价于:
using System.Workflow.ComponentModel.Serialization;
[assembly: XmlnsDefinition("http://EssentialWF/Activities", "EssentialWF.Activities")]
namespace WorkflowConsoleApplication9
{
class Program
{
static void Main()
{
Sequence s = new Sequence();
s.Activies.Add(new PrintKey());
s.Activies.Add(new PrintKey());
}
}
}
所有的活动都派生自System.Workflow.ComponentModel.Activity类,都要重载Execute()方法来定义活动的执行逻辑。
Activity派生自DependObject(后者提供依赖属性DependProperty,见第7章)
Activity的Enabled属性,表明是否被禁用(可以认为mark了若干语句)。这个属性决定了复合活动CompositeActivity的EnabledActivities属性。
Activity的Name属性是活动的标志。
Activity的Parent属性指明了上一级的复合活动
重载的AES Execute(AEC context)方法是非常重要的,执行逻辑全都封装在这里。通过上下文context传递的信息,执行当前Activity的逻辑,最后返回一个状态:没有书签(即没有回调方法ContinueAt),就返回AES.Closed;否则返回AES.Executing,表示还在等待异步执行结果。还有,这是一个protected internal方法,所以只有context.ExecuteActivity(activity)可以间接调用这个方法。
异步回调ContinueAt(object sender, QueueEventArgs e);
注意,子活动使用的是QueueEventArgs(这个类中仅有一个QueueName属性)
WorkflowQueuingService类和WorkflowQueue类,其实就是上一章的BookmarkManager和Bookmark。WorkflowQueuingService是维持着WorkflowQueue的集合,而WorkflowQueue这个队列则是用来存取数据的,
WorkflowQueue的QueueItemAvailable事件则是上一章的BookmarkLocation,表示收到了外部信号——我猜测,因为WorkflowQueue有一个Enqueue(object item)方法,在进队过程中(也就是外部输入),激发了这个QueueItemAvailable事件,从而引发异步ContinueAt回调。
PrintKey活动与ReadLine活动,分别展示了无书签和有书签两种WF编程模型。
AEC在这里的作用:提供mgr书签管理器。
2.复合活动CompositeActivity
所有活动形成一棵树,每个子活动只能属于一个复合活动,跟活动的parent=null
观察Sequence这个顺序流,是{}的功能再现。这里用到了Activity的Closed事件:并将异步ContinueAt绑在上面。随着context.ExecuteActivity(activity)执行完子活动,在这个方法中会同时激发Closed事件(同时把activity传递给OnClosed的参数e.Activity),从而恢复了书签ContinueAt。而书签ContinueAt中重复着这套逻辑,就这样一直迭代下去,直到结束。
还有,就是这个异步回调ContinueAt(object sender, AESChangedEventArgs e); 使用的是AESChangedEventArgs类,这个类有3个参数,当前我们只使用到了其中的Activity属性
AEC在这里的作用:间接执行Activity的方法,推动其Status的变化
3.WF的XAML表示
以xoml为扩展名
<Sequence xmlns="http://EssentialWF/Activities">
<Print />
<Print />
</Sequence>
等价于:
using System.Workflow.ComponentModel.Serialization;
[assembly: XmlnsDefinition("http://EssentialWF/Activities", "EssentialWF.Activities")]
namespace WorkflowConsoleApplication9
{
class Program
{
static void Main()
{
Sequence s = new Sequence();
s.Activies.Add(new PrintKey());
s.Activies.Add(new PrintKey());
}
}
}
相关文章推荐
- WF本质论 读书心得 2 WF程序 下
- WF本质论 读书心得 1 剖析WF (上)
- WF本质论 读书心得 1 剖析WF (下)
- [读书心得]让你的 ASP.NET程序(Web Form)效能更快
- 程序渣自学一些心得_读书和学习
- WF本质论 读书心得 3 活动的执行
- 程序渣自学一些心得_读书和学习
- 关于创建无窗体程序的一点心得
- 最近 程序开发心得
- 用flashbuilder建立和发布air程序心得
- Android 逆向apk程序的心得
- 从Windows下Java程序如何操作Linux下Hbase数据库表过程、难点的心得历程
- 用.NET编写串口程序的一点心得
- 微信小程序个人心得
- 第一个Ajax.net程序的实现及心得。
- 看了一个月资料,写一篇论文读书心得
- opengl程序调试心得
- 挺立在孤独,失败与屈辱的废墟上(俞敏洪) ----读书心得
- 程序心得
- Python中文入门书读书心得