【深入浅出WF】——IExecutionProperty接口应用

实例代码:\WF_WCF_Samples\WF\Basic\CustomActivities\Code-Bodied\ExecutionProperties\
概述
IExecutionProperty接口定义:提供了执行属性的机制,这些执行属性用来配置相关活动的工作项前后的线程本地存储区(Thread Local Storage,简称TLS)。

 

该接口有两个成员:
CleanupWorkflowThread:在销毁TLS时操纵ExecutionProperties
SetupWorkflowThread:在建立TLS时操纵ExecutionProperties
实例概述:
工作流ThreeColors使用context.ScheduleActivity(this.Body)来执行Sequence,由于每个Sequence(依次由WriteLine、Delay和WriteLine组成)都有时间延时,所以在执行每个Sequence对应的线程的时候,同时改变控制台字体颜色,于是出现了WriteLine的内容以不同的颜色交叉执行。
相关知识点:
1、 调用活动实例方法
//WorkflowInvoker.Invoke(new lion.Activity1());   //通常的做法
Activity workflow = (Activity)XamlServices.Load("Activity1.xaml");
WorkflowInvoker.Invoke(workflow);
我们接着看ThreeColors.xaml文件,它的代码是<Sequence…</Sequence>。而当我们新建一个Activity1.xaml,发现它是<Acitivity>…</Acitivity>格式的。
疑问1:我们可以使用new的方法来实例化xaml格式的工作流吗?
完全可以。但是注意xaml格式工作流的格式。以此为例:
如果我们想采用通常的做法来实例化一个活动,我的做法是把ThreeColors.xaml Code中的内容拷贝到空的Activity1.xaml的标签<Acitivity>内。注意<Activity x:Class="lion.Activity1"的Class名称一定要自定义,默认的可能在编译的时候会提示“找不到命名空间”(目前在vs2010 beta2测试)。同时还要注意:我们直接在ThreeColors.xaml的Code中添加<Activity>标签是不可以的(理论上应该可以)。
疑问2:针对疑问1的处理,我们可以采用XamlServices.Load的方法来调用Activity1.xaml吗?
答案:不行。
解决办法:一方面我们需要手工把文件Activity1.xaml拷贝到此项目的bin目录下,另一方面,Activity1.xaml的Code中需要去除<Activity>标签。
关于XamlServices的使用可参考此文。
小结:
IExecutionProperty接口可以用来执行实例活动的作者信息。
参考资料
http://msdn.microsoft.com/en-us/library/ee358743(VS.100).aspx

posted @ 2009-12-18 15:40  风影极光  阅读(405)  评论(0编辑  收藏  举报