《WF in 24 Hours》读书笔记 - Hour 3(1) - Workflow:添加宿主和事件监听

1. 创建项目组,并添加一个Console Project和Activity Library,在Activity
Library的项目中添加CodeActivity1和CodeActivity2,最终结构如下图所示:

2. CodeActivity1和2的代码如下:


 1     public sealed class CodeActivity1 : CodeActivity
2 {
3 // Define an activity input argument of type string
4 public InArgument<string> Text { get; set; }
5
6 // If your activity returns a value, derive from CodeActivity<TResult>
7 // and return the value from the Execute method.
8 protected override void Execute(CodeActivityContext context)
9 {
10 Console.WriteLine("before delay: \‘{0}\‘", DateTime.Now.ToLongTimeString());
11 }
12 }
13
14 public sealed class CodeActivity2 : CodeActivity
15 {
16 // Define an activity input argument of type string
17 public InArgument<string> Text { get; set; }
18
19 // If your activity returns a value, derive from CodeActivity<TResult>
20 // and return the value from the Execute method.
21 protected override void Execute(CodeActivityContext context)
22 {
23 Console.WriteLine("after delay: \‘{0}\‘", DateTime.Now.ToLongTimeString());
24 }
25 }

3. 修改Activity1.xaml如下:

4. 修改Console
Project的program.cs(注意,需要事先引入WorkflowsProject和System.Activities.dll)


 1         static void Main(string[] args)
2 {
3 AutoResetEvent syncEvent = new AutoResetEvent(false);
4
5 Activity wf = new WorkflowsProject.Activity1();
6
7 // Create the WorkflowApplication using the desired
8 // workflow definition.
9 WorkflowApplication wfApp = new WorkflowApplication(wf);
10
11 // Handle the desired lifecycle events.
12 wfApp.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
13 {
14 Console.WriteLine("Workflow {0} completed.", e.InstanceId.ToString());
15 syncEvent.Set();
16 };
17
18 wfApp.Aborted = delegate(WorkflowApplicationAbortedEventArgs e)
19 {
20 Console.WriteLine("Workflow {0} terminated because {1}", e.InstanceId, e.Reason.Message);
21 syncEvent.Set();
22 };
23
24 // Start the workflow.
25 wfApp.Run();
26
27 // Wait for Completed to arrive and signal that
28 // the workflow is complete.
29 syncEvent.WaitOne();
30
31 // Keep the console screen alive when workflow comnpletes
32 Console.WriteLine("Press enter to continue");
33 Console.Read();
34 }

5. 运行。结果如下:

总结:通过此例,我们可以看到通过WorkflowApplication,我们可以在宿主程序中启动Workflow,并且捕捉Workflow的事件。

时间: 2024-11-08 14:53:57

《WF in 24 Hours》读书笔记 - Hour 3(1) - Workflow:添加宿主和事件监听的相关文章

[JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播

-->事件冒泡和捕获-->事件监听-->阻止事件传播 一.事件冒泡和捕获 1.概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的onclick事件也会被触发.js里称这种事件连续发生的机制为事件冒泡或者事件捕获.IE浏览器:事件从里向外发生,事件从最精确对象(target)开始触发,然后到最不精确的对象(document)触发,即事件冒泡 Netscape:事件从外向里发生,事件从最不精确的对象(document)开始触发,然后到最精确对象(

2015.04.24,外语,读书笔记-《Word Power Made Easy》 12 “如何奉承朋友” SESSION 34

1.no fatigue indefatigable([indi'fætig?b(?)l] adj. 不知疲倦的)来自faigue,in-是反义词缀:后缀-able表示able to be,因此indefatigable指unable to be fatigued.名词是indefatigability (n.不疲劳,不屈不挠). 2.how simple can one be? ingenuous([in'd?enju?s] adj. 坦白的, 正直的, 天真的)是一个褒义词,尽管它有同义词n

jQuery-mobile 学习笔记之三(事件监听)

续上 触摸事件 - 当用户触摸屏幕时触发(敲击和滑动) 滚动事件 - 当上下滚动时触发 方向事件 - 当设备垂直或水平旋转时触发 页面事件 - 当页面被显示.隐藏.创建.加载以及/或卸载时触发 一.初始化事件 1. ready 事件 页面加载完成 $(document).ready(function(){ //your code here... }); 2. 页面加载完成事件二 pageinit $(document).on('pageinit','#pageone',function(){ /

GUI编程笔记05:GUI事件监听机制原理和举例说明

1.事件监听机制:       A:事件源          事件发生的地方       B:事件             就是要发生的事情       C:事件处理       就是针对发生的事情做出的处理方案       D:事件监听       就是把事件源和事件关联起来 2.举例:人受伤事件. 事件源:人(具体的对象)         Person p1 = new Person("张三");         Person p2 = new Person("李四&qu

JAVA学习笔记(四十七)- 事件监听

定义ActionListener接口的实现类实现事件监听 import java.awt.Button; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; /* * 事件监听 */ public class Te

Android学习笔记二十二.使用ContentProvider实现数据共享(五).监听ContentProvider的数据改变

一.使用ContentProvider管理多媒体内容 Android提供了Camera程序来支持拍照.拍摄视频,用户拍摄的相片.视频都将存放在固定的位置.Android同样为这些多媒体内容提供了ContentProvider,所以我们可以通过使用ContentProvider实现其他应用直接访问Camera所拍摄的照片.视频等. 1.多媒体ContentProvider的Uri (1)MediaStore.Audio.Media.EXTERNAL_CONTENT_URI:存储在外部存储器(SD卡

cocos2d-x3.x 事件监听笔记

cocos版本:3.2 VS版本:VS2013 一. 添加事件监听一般步骤为:创建时间监听器-->增事件监听器-->用导演获取时间派发器将事件监听器添加进去. 二.需要注意的地方有两点: 1.多点触摸中的onTouchesBegan方法没有返回值.如果带返回值,不会报错,但是会报链接错误. 2.多点触摸中的传入参数和单点触摸的传入参数不同. 具体看以下代码: 1.单点触摸监听器的处理触摸方法: std::function<bool(Touch*, Event*)> onTouchB

[.NET] 《Effective C#》读书笔记(二)- .NET 资源托管

<Effective C#>读书笔记(二)- .NET 资源托管 简介 续 <Effective C#>读书笔记(一)- C# 语言习惯. .NET 中,GC 会帮助我们管理内存,我们并不需要去担心内存泄漏,资源分配和指针初始化等问题.不过,它也并非万能,因为非托管资源需要我们自己进行清理,如文件句柄.数据库连接.GDI+ 对象和COM 对象等. 目录 十二.推荐使用成员初始化器而不是赋值语句 十三.正确地初始化静态成员变量 十四.尽量减少重复的初始化逻辑 十五.使用 using

Java 线程第三版 第六章 高级同步议题 读书笔记

多线程数据同步错误比较难检测,因为通常是与事件的特定发生顺序有关. 一.同步术语 Barrier(屏障) barrier是多个Thread的集合点:所有的Thread都应该到齐在这个barrier之后才能允许它们继续下去. Condition variable(条件变量) 实际上不是变量,而是与某个lock有关联的变量. Event variable(事件变量) 条件变量的另一个名称. Critical section(临界区) 临界区是synchronized方法或者block. Lock(锁