﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-Windows Workflow Foundation</title><link>http://www.cnblogs.com/foundation/</link><description>  WXWinter  ——  兰竹菊梅★春夏秋冬☆</description><language>zh-cn</language><lastBuildDate>Wed, 10 Feb 2010 08:05:01 GMT</lastBuildDate><pubDate>Wed, 10 Feb 2010 08:05:01 GMT</pubDate><ttl>60</ttl><item><title>WF4.0 基础篇 (二十二) Tracking</title><link>http://www.cnblogs.com/foundation/archive/2010/02/05/1664405.html</link><dc:creator>WXWinter(冬)</dc:creator><author>WXWinter(冬)</author><pubDate>Fri, 05 Feb 2010 06:33:00 GMT</pubDate><guid>http://www.cnblogs.com/foundation/archive/2010/02/05/1664405.html</guid><description><![CDATA[<p>阅读: 64 评论: 0 作者: <a href="http://www.cnblogs.com/foundation/" target="_blank">WXWinter(冬)</a> 发表于 2010-02-05 14:33 <a href="http://www.cnblogs.com/foundation/archive/2010/02/05/1664405.html" target="_blank">原文链接</a></p><p>
 </p><p style="text-align: center"><h1><span style="font-family:宋体">Tracking 介绍
</span></h1></p><p>WF跟踪是用来记录工作流执行情况
</p><p>    WF跟踪由以下几部分组成：
</p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:79px"/><col style="width:511px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: center"><span style="font-size:10pt"><span style="font-family:宋体">跟踪记录</span><span style="font-family:Times New Roman">
								</span></span></p><p style="text-align: center"><span style="font-family:Times New Roman; font-size:10pt">Tracking Records</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">从工作流运行时发出</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: center"><span style="font-size:10pt"><span style="font-family:宋体">跟踪配置</span><span style="font-family:Times New Roman">
								</span></span></p><p style="text-align: center"><span style="font-family:Times New Roman; font-size:10pt">Tracking Profile</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">用来筛选从工作流实例中发出的跟踪记录</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: center"><span style="font-size:10pt"><span style="font-family:宋体">跟踪参与者</span><span style="font-family:Times New Roman">
								</span></span></p><p style="text-align: center"><span style="font-family:Times New Roman; font-size:10pt">Tracking Participants</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">用来订阅跟踪记录。跟踪参与者包括处理来自跟踪记录的负载的逻辑</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: center"><span style="font-family:Times New Roman; font-size:10pt">ActivityInfo</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:Times New Roman; font-size:10pt">System.Activities.Tracking.ActivityInfo
</span></p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0632_WF401.png" alt=""/></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: center"><span style="font-family:Times New Roman; font-size:10pt">TrackingProvider</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:Times New Roman; font-size:10pt">System.Activities.Tracking.TrackingProvider
</span></p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0632_WF402.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><p style="text-align: center"><h1>跟踪记录 TrackingRecord 
</h1></p><p>跟踪记录[TrackingRecord]
</p><p>DLL:System.Activities.dll
</p><p>类名:System.Activities.Tracking.TrackingRecord
</p><p>
 </p><p>TrackingRecord为[Abstract],WF4自带了以下功能[TrackingRecord]
</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0632_WF403.png" alt=""/>
	</p><p> 
 </p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:164px"/><col style="width:427px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:Times New Roman; font-size:10pt">CustomTrackingRecord</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-size:10pt"><span style="font-family:宋体">可在</span><span style="font-family:Times New Roman">Activity</span><span style="font-family:宋体">中使用</span><span style="font-family:Times New Roman">[</span></span><span style="font-family:宋体; font-size:9pt">context.Track(</span><span style="font-family:Times New Roman; font-size:10pt">CustomTrackingRecord</span><span style="font-family:宋体; font-size:9pt">)</span><span style="font-size:10pt"><span style="font-family:Times New Roman">]</span><span style="font-family:宋体">方式添加自定义跟踪记录</span></span></p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td></tr></tbody></table></div><p>
 </p><p>
 </p><p style="text-align: center"><h1>跟踪配置 TrackingProfile
</h1></p><p>跟踪配置[TrackingProfile]
</p><p>DLL:System.Activities.dll
</p><p>类名:System.Activities.Tracking.TrackingProfile
</p><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0632_WF404.png" alt=""/><span style="font-family:宋体">
		</span></p><p><span style="font-family:宋体">Queries类型为[System.Collections.ObjectModel.Collection&lt;System.Activities.Tracking.TrackingQuery&gt;],</span>,WF4自带了以下功能[<span style="font-family:宋体">TrackingQuery</span>]<span style="font-family:宋体">
		</span></p><p>
 </p><p><span style="font-family:宋体">工作流追踪包括两个主要组件：追踪参与和追踪配置。追踪配置定义了您希望运行时需要追踪的事件和数据，配置(Profiles)包括以下三种重要的查询类型： 
</span></p><p>
 </p><p>
 </p><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0632_WF405.png" alt=""/><span style="font-family:宋体">
		</span></p><p>
 </p><p>
 </p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:161px"/><col style="width:429px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">ActivityStateQuery</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">用于指定活动的状态(如关闭)、提取数据的变量和参数
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:10pt">[States属性]:由System.Activities.Tracking.ActivityStates的[Fieldes]提供
</span></p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0632_WF406.png" alt=""/><span style="font-family:宋体; font-size:10pt">
							</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">WorkflowInstanceQuery</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">用于指定工作流事件
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:10pt">[States属性]:由System.Activities.Tracking.WorkflowInstanceStates的[Fieldes]提供
</span></p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0632_WF407.png" alt=""/></p></td></tr><tr style="height: 287px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">CustomTrackingQuery</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">用于指定对追踪数据的明确调用，常用语自定义的活动中</span></p></td></tr></tbody></table></div><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p style="text-align: center"><h1>跟踪参与者TrackingParticipant
</h1></p><p>跟踪参与者 [<span style="font-family:宋体">TrackingParticipant</span>]
</p><p>DLL:System.Activities.dll
</p><p>类名:System.Activities.Tracking.TrackingProfile
</p><p><span style="font-family:宋体">abstract
</span></p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0632_WF408.png" alt=""/><span style="font-family:宋体">
		</span></p><p>要自定义[跟踪参与者]要从该类继承
</p><p>
 </p><p>
 </p><p>
 </p><p style="text-align: center"><h1><span style="font-family:宋体">自定义跟踪参与者
</span></h1></p><p><span style="font-family:宋体">例子下载:
</span></p><p><span style="font-family:宋体">http://files.cnblogs.com/foundation/CustomTrackingSample.rar
</span></p><h2><span style="font-family:宋体">自定义跟踪参与者
</span></h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:1067px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:9pt"><span style="color:blue">public</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">myTrackingParticipant</span> : System.Activities.Tracking.<span style="color:#2b91af">TrackingParticipant</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">   {
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">const</span>
								<span style="color:#2b91af">String</span> participantName = <span style="color:#a31515">"wxwinter_myTrackingParticipant"</span>;
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">public</span> myTrackingParticipant()
</span></p><p><span style="font-family:宋体; font-size:9pt">        {
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:#2b91af">Console</span>.WriteLine( <span style="color:#a31515">"{0} Created"</span>, participantName);
</span></p><p><span style="font-family:宋体; font-size:9pt">        }
</span></p><p>
 </p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">void</span> Track(System.Activities.Tracking.<span style="color:#2b91af">TrackingRecord</span> record, <span style="color:#2b91af">TimeSpan</span> timeout)
</span></p><p><span style="font-family:宋体; font-size:9pt">        {
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:#2b91af">Console</span>.Write( <span style="color:#a31515">"{0} emitted trackRecord: {1}  Level: {2}, RecordNumber: {3}"</span>,  participantName, record.GetType().FullName,  record.Level, record.RecordNumber);
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">            System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceRecord</span> workflowInstanceRecord = record <span style="color:blue">as</span> System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceRecord</span>;
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">if</span> (workflowInstanceRecord != <span style="color:blue">null</span>)
</span></p><p><span style="font-family:宋体; font-size:9pt">            {
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:#2b91af">Console</span>.WriteLine( <span style="color:#a31515">" Workflow InstanceID: {0} Workflow instance state: {1}"</span>, record.InstanceId, workflowInstanceRecord.State);
</span></p><p><span style="font-family:宋体; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">            System.Activities.Tracking.<span style="color:#2b91af">ActivityStateRecord</span> activityStateRecord = record <span style="color:blue">as</span> System.Activities.Tracking.<span style="color:#2b91af">ActivityStateRecord</span>;
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">if</span> (activityStateRecord != <span style="color:blue">null</span>)
</span></p><p><span style="font-family:宋体; font-size:9pt">            {
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:#2b91af">IDictionary</span>&lt;<span style="color:#2b91af">String</span>, <span style="color:blue">object</span>&gt; variables = activityStateRecord.Variables;
</span></p><p>               
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:#2b91af">StringBuilder</span> vars = <span style="color:blue">new</span>
								<span style="color:#2b91af">StringBuilder</span>();
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">if</span> (variables.Count &gt; <span style="color:brown">0</span>)
</span></p><p><span style="font-family:宋体; font-size:9pt">                {
</span></p><p><span style="font-family:宋体; font-size:9pt">                    vars.AppendLine(<span style="color:#a31515">"\n\tVariables:"</span>);
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:#2b91af">KeyValuePair</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; variable <span style="color:blue">in</span> variables)
</span></p><p><span style="font-family:宋体; font-size:9pt">                    {   
</span></p><p><span style="font-family:宋体; font-size:9pt">                        vars.AppendLine(<span style="color:#2b91af">String</span>.Format( <span style="color:#a31515">"\t\tName: {0} Value: {1}"</span>, variable.Key, variable.Value));
</span></p><p><span style="font-family:宋体; font-size:9pt">                    }
</span></p><p><span style="font-family:宋体; font-size:9pt">                }
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:#2b91af">Console</span>.WriteLine( <span style="color:#a31515">" :Activity DisplayName: {0} :ActivityInstanceState: {1} {2}"</span>,  activityStateRecord.Activity.Name, activityStateRecord.State, ((variables.Count &gt; <span style="color:brown">0</span>) ? vars.ToString() : <span style="color:#2b91af">String</span>.Empty));
</span></p><p><span style="font-family:宋体; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">            System.Activities.Tracking.<span style="color:#2b91af">CustomTrackingRecord</span> customTrackingRecord = record <span style="color:blue">as</span> System.Activities.Tracking.<span style="color:#2b91af">CustomTrackingRecord</span>;
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">if</span> ((customTrackingRecord != <span style="color:blue">null</span>) &amp;&amp; (customTrackingRecord.Data.Count &gt; <span style="color:brown">0</span>))
</span></p><p><span style="font-family:宋体; font-size:9pt">            {
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"\n\tUser Data:"</span>);
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">string</span> data <span style="color:blue">in</span> customTrackingRecord.Data.Keys)
</span></p><p><span style="font-family:宋体; font-size:9pt">                {
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">" \t\t {0} : {1}"</span>, data, customTrackingRecord.Data[data]);
</span></p><p><span style="font-family:宋体; font-size:9pt">                }
</span></p><p><span style="font-family:宋体; font-size:9pt">            }
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:#2b91af">Console</span>.WriteLine();
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">        }
</span></p><p><span style="font-family:宋体; font-size:9pt">    }
</span></p></td></tr></tbody></table></div><p>
 </p><h2><span style="font-family:宋体">定义Profile
</span></h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:590px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">myTrackingTools</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">   {
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">static</span> System.Activities.Tracking.<span style="color:#2b91af">TrackingParticipant</span> getTracking()
</span></p><p><span style="font-family:宋体; font-size:9pt">       {
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:green">//(1) TrackingProfile</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">           System.Activities.Tracking.<span style="color:#2b91af">TrackingProfile</span> trackingProfile = <span style="color:blue">new</span> System.Activities.Tracking.<span style="color:#2b91af">TrackingProfile</span>();
</span></p><p><span style="font-family:宋体; font-size:9pt">           trackingProfile.Name = <span style="color:#a31515">"wxwinterTrackingProfile"</span>;
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:green">//(1.1)</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">           System.Activities.Tracking.<span style="color:#2b91af">CustomTrackingQuery</span> customQuery = <span style="color:blue">new</span> System.Activities.Tracking.<span style="color:#2b91af">CustomTrackingQuery</span>();
</span></p><p><span style="font-family:宋体; font-size:9pt">           customQuery.Name = <span style="color:#a31515">"*"</span>;
</span></p><p><span style="font-family:宋体; font-size:9pt">           customQuery.ActivityName = <span style="color:#a31515">"*"</span>;
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:green">//(1.2)</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">           System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceQuery</span> instanceQuery = <span style="color:blue">new</span> System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceQuery</span>();
</span></p><p><span style="font-family:宋体; font-size:9pt">           instanceQuery.States.Add(System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceStates</span>.Aborted);
</span></p><p><span style="font-family:宋体; font-size:9pt">           instanceQuery.States.Add(System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceStates</span>.Canceled);
</span></p><p><span style="font-family:宋体; font-size:9pt">           instanceQuery.States.Add(System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceStates</span>.Completed);
</span></p><p><span style="font-family:宋体; font-size:9pt">           instanceQuery.States.Add(System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceStates</span>.Idle);
</span></p><p><span style="font-family:宋体; font-size:9pt">           instanceQuery.States.Add(System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceStates</span>.Persisted);
</span></p><p><span style="font-family:宋体; font-size:9pt">           instanceQuery.States.Add(System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceStates</span>.Resumed);
</span></p><p><span style="font-family:宋体; font-size:9pt">           instanceQuery.States.Add(System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceStates</span>.Started);
</span></p><p><span style="font-family:宋体; font-size:9pt">           instanceQuery.States.Add(System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceStates</span>.Suspended);
</span></p><p><span style="font-family:宋体; font-size:9pt">           instanceQuery.States.Add(System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceStates</span>.Terminated);
</span></p><p><span style="font-family:宋体; font-size:9pt">           instanceQuery.States.Add(System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceStates</span>.UnhandledException);
</span></p><p><span style="font-family:宋体; font-size:9pt">           instanceQuery.States.Add(System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceStates</span>.Unloaded);
</span></p><p><span style="font-family:宋体; font-size:9pt">           instanceQuery.States.Add(System.Activities.Tracking.<span style="color:#2b91af">WorkflowInstanceStates</span>.Unsuspended);
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:green">//(1.3)</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">           System.Activities.Tracking.<span style="color:#2b91af">ActivityStateQuery</span> activityQuery = <span style="color:blue">new</span> System.Activities.Tracking.<span style="color:#2b91af">ActivityStateQuery</span>();
</span></p><p><span style="font-family:宋体; font-size:9pt">           activityQuery.ActivityName = <span style="color:#a31515">"*"</span>;
</span></p><p><span style="font-family:宋体; font-size:9pt">           activityQuery.States.Add(<span style="color:#a31515">"*"</span>);  //  System.Activities.Tracking.<span style="color:#2b91af">ActivityStates</span>.Executing  // System.Activities.Tracking.<span style="color:#2b91af">ActivityStates</span>.Canceled  
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">           activityQuery.Variables.Add(<span style="color:#a31515">"*"</span>);
</span></p><p><span style="font-family:宋体; font-size:9pt">           activityQuery. Arguments.Add(<span style="color:#a31515">"*"</span>);
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:green">//(1.4)</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">           trackingProfile.Queries.Add(customQuery);
</span></p><p><span style="font-family:宋体; font-size:9pt">           trackingProfile.Queries.Add(instanceQuery);
</span></p><p><span style="font-family:宋体; font-size:9pt">           trackingProfile.Queries.Add(activityQuery);
</span></p><p>
 </p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:green">//(2)</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:#2b91af">myTrackingParticipant</span> myTracking = <span style="color:blue">new</span>
								<span style="color:#2b91af">myTrackingParticipant</span>();
</span></p><p><span style="font-family:宋体; font-size:9pt">           myTracking.TrackingProfile = trackingProfile;
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">return</span> myTracking;
</span></p><p><span style="font-family:宋体; font-size:9pt">       }
</span></p><p><span style="font-family:宋体; font-size:9pt">   }
</span></p></td></tr></tbody></table></div><p>
 </p><h2><span style="font-family:宋体">具有CustomTrackingRecord功能的Activity
</span></h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:963px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">sealed</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">myActivity</span> : <span style="color:#2b91af">CodeActivity</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">    {
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">void</span> Execute(<span style="color:#2b91af">CodeActivityContext</span> context)
</span></p><p><span style="font-family:宋体; font-size:9pt">        {
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"myActivity Execute"</span>);
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">            System.Activities.Tracking.<span style="color:#2b91af">CustomTrackingRecord</span> myRecord = <span style="color:blue">new</span> System.Activities.Tracking.<span style="color:#2b91af">CustomTrackingRecord</span>(<span style="color:#a31515">"myActivity_CustomTrackingRecord"</span>);
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">            myRecord.Data.Add(<span style="color:#a31515">"wxd"</span>, <span style="color:brown">12345</span>);
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">            myRecord.Data.Add(<span style="color:#a31515">"wxwinter"</span>, <span style="color:#a31515">"lzm"</span>);
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">            context.Track(myRecord);
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">        }
</span></p><p><span style="font-family:宋体; font-size:9pt">    }
</span></p></td></tr></tbody></table></div><p>
 </p><p>
 </p><h2><span style="font-family:宋体">使用
</span></h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:20px"/><col style="width:570px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">工作流</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0632_WF409.png" alt=""/></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">宿主</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:9pt"><span style="color:blue">class</span>
								<span style="color:#2b91af">Program</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">    {
</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">static</span>
								<span style="color:blue">void</span> Main(<span style="color:blue">string</span>[] args)
</span></p><p><span style="font-family:宋体; font-size:9pt">        {
</span></p><p><span style="font-family:宋体; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WindowWidth = <span style="color:brown">150</span>;
</span></p><p>        
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:green">//-----------------------------------------------------------------------------------</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:green">//WorkflowApplication</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:#2b91af">WorkflowApplication</span> instance = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowApplication</span>(<span style="color:blue">new</span>
								<span style="color:#2b91af">testWorkflow</span>());
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">            instance.Extensions.Add(<span style="color:#2b91af">myTrackingTools</span>.getTracking());
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">            instance.Run();
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:green">//------------------------------------- or ------------------------------------------</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:green">//WorkflowInvoke</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:green">// WorkflowInvoker invoker = new WorkflowInvoker(new testWorkflow());</span>
							</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:green">//  invoker.Extensions.Add(myTrackingTools.getTracking());</span>
							</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:green">// invoker.Invoke();</span>
							</span></p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:green">//---------------------------------------------------------------------------------</span>
							</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.Read();
</span></p><p><span style="font-family:宋体; font-size:9pt">        }
</span></p><p>     
 </p><p><span style="font-family:宋体; font-size:9pt">    }</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0632_WF4010.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><p>
 </p><p style="text-align: center"><h1>EtwTrackingParticipant
</h1></p><p>
 </p><p>[EtwTrackingParticipant]:(ETW：Enterprise Trace for Windows)
</p><p>DLL:System.Activities.dll
</p><p>类名:ystem.Activities.Tracking.EtwTrackingParticipant
</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0632_WF4011.png" alt=""/>
	</p><p>ETW是Windows里本地组件的一个追踪系统，由操作系统中的包括驱动程序、其它核心级代码等很多组件和服务调用。写入到ETW的数据可以通过定制代码或者诸如即将推出的Windows服务AppFabric等工具来使用。AppFabric将同ETW一起搜集ETW数据并将它存储到SQL数据库。
</p><p>
 </p><img src="http://www.cnblogs.com/foundation/aggbug/1664405.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/foundation/archive/2010/02/05/1664405.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/foundation/archive/2010/02/05/1664405.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/>· <a href="http://news.cnblogs.com/n/56850/" target="_blank">“谷姐”：披着“谷歌”羊皮的悲哀？</a><span style="color:gray">(2010-02-10 15:32)</span><br/>· <a href="http://news.cnblogs.com/n/56849/" target="_blank">2010，奇虎的本命年</a><span style="color:gray">(2010-02-10 15:26)</span><br/>· <a href="http://news.cnblogs.com/n/56847/" target="_blank">微软赢得Windows XP WGA诉讼</a><span style="color:gray">(2010-02-10 15:23)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>适用于WF4.0的流程设计器  (Wxd.WF,BPM.Foundation,Wxwinter.WF 升级用)</title><link>http://www.cnblogs.com/foundation/archive/2010/02/05/1664402.html</link><dc:creator>WXWinter(冬)</dc:creator><author>WXWinter(冬)</author><pubDate>Fri, 05 Feb 2010 06:31:00 GMT</pubDate><guid>http://www.cnblogs.com/foundation/archive/2010/02/05/1664402.html</guid><description><![CDATA[<p>阅读: 121 评论: 15 作者: <a href="http://www.cnblogs.com/foundation/" target="_blank">WXWinter(冬)</a> 发表于 2010-02-05 14:31 <a href="http://www.cnblogs.com/foundation/archive/2010/02/05/1664402.html" target="_blank">原文链接</a></p><p>适用于WF4.0的流程设计器  (Wxd.WF,BPM.Foundation,Wxwinter.WF 升级用)
</p><p>
 </p><p>提供调试,图形化状态跟踪,自动生成数据页面,格式转换,Silverlight支持等功能
</p><p>后面我会加入转换WF3.x流程的功能
</p><p>
 </p><h1>主界面
</h1><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF401.png" alt=""/>
	</p><p>
 </p><h1>创建工作流
</h1><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF402.png" alt=""/>
	</p><p>
 </p><h1>保存工作流
</h1><p>可以保存成多种格式
</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF403.png" alt=""/>
	</p><p>
 </p><h1>流程查看
</h1><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF404.png" alt=""/>
	</p><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF405.png" alt=""/>
	</p><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF406.png" alt=""/>
	</p><p>
 </p><h1>流程设计
</h1><p>VS2010的设计风格,可在工具栏添加自定Activity
</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF407.png" alt=""/>
	</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF408.png" alt=""/>
	</p><p>
 </p><h1>流程调试
</h1><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF409.png" alt=""/>
	</p><p>
 </p><p>用控制台捕获流程运行结果
</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF4010.png" alt=""/>
	</p><p>
 </p><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF4011.png" alt=""/>
	</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF4012.png" alt=""/>
	</p><p>
 </p><p>
 </p><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF4013.png" alt=""/>
	</p><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF4014.png" alt=""/>
	</p><p>
 </p><h1>可生转换为自定义结构的流程结构用于在Silverlight中查看,设计
</h1><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF4015.png" alt=""/>
	</p><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF4016.png" alt=""/>
	</p><p>
 </p><p>
 </p><h1>项目结构
</h1><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/020510_0629_WF4017.png" alt=""/>
	</p><p>
 </p><p>以下版本的使用者可到我的 Team Foundation 服务器下载代码(注意随时更新),用户名与口令还是原来的没有改变,连不上多试几次
</p><p>
 </p><p>Wxd.WF (ASPNET 版)
</p><p>BPM.Foundation (ASPNET 版)
</p><p>BPM.Foundation (Silverlight 版)
</p><p>Wxwinter.WF (Silverlight 版)
</p><p>
 </p><p>说明:
</p><p>Wxd.WF (Winform 版)
</p><p>BPM.Foundation (WPF 版)
</p><p>只是两个开发时的DEOM,后来放出供大家学习,这两个版不提供到WF4.0的升级方案
</p><p>
 </p><p>
 </p><img src="http://www.cnblogs.com/foundation/aggbug/1664402.html?type=1" width="1" height="1" alt=""/><p>评论: 15　<a href="http://www.cnblogs.com/foundation/archive/2010/02/05/1664402.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/foundation/archive/2010/02/05/1664402.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/>· <a href="http://news.cnblogs.com/n/56850/" target="_blank">“谷姐”：披着“谷歌”羊皮的悲哀？</a><span style="color:gray">(2010-02-10 15:32)</span><br/>· <a href="http://news.cnblogs.com/n/56849/" target="_blank">2010，奇虎的本命年</a><span style="color:gray">(2010-02-10 15:26)</span><br/>· <a href="http://news.cnblogs.com/n/56847/" target="_blank">微软赢得Windows XP WGA诉讼</a><span style="color:gray">(2010-02-10 15:23)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>WF4.0 基础篇 (二十一) WorkflowInvoker</title><link>http://www.cnblogs.com/foundation/archive/2010/01/27/1657414.html</link><dc:creator>WXWinter(冬)</dc:creator><author>WXWinter(冬)</author><pubDate>Wed, 27 Jan 2010 04:41:00 GMT</pubDate><guid>http://www.cnblogs.com/foundation/archive/2010/01/27/1657414.html</guid><description><![CDATA[<p>阅读: 158 评论: 2 作者: <a href="http://www.cnblogs.com/foundation/" target="_blank">WXWinter(冬)</a> 发表于 2010-01-27 12:41 <a href="http://www.cnblogs.com/foundation/archive/2010/01/27/1657414.html" target="_blank">原文链接</a></p><p>
 </p><p><span style="font-family:宋体">本节主要介绍</span>WF4 中 <span style="font-family:宋体">WorkflowInvoker的使用</span>
	</p><p>本文例子下载:
</p><p>http://files.cnblogs.com/foundation/WorkflowInvokerSample.rar
</p><p>
 </p><p>本文例子说明
</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0438_WF401.png" alt=""/><span style="font-family:宋体">
		</span></p><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0438_WF402.png" alt=""/><span style="font-family:宋体">
		</span></p><p>
 </p><p style="text-align: center"><h1><span style="font-family:宋体"> WorkflowInvoker
</span></h1></p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:72px"/><col style="width:518px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">类名</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">System.Activitys.WorkflowInvoker</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">文件</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">System.Activities.dll</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结构说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">继承 Object
</span></p><p><span style="font-family:宋体; font-size:10pt">是一个 sealed类
</span></p><p><span style="font-family:宋体; font-size:10pt">override 了 [CacheMetadata方法] 与 [Execute方法] 
</span></p></td></tr><tr style="height: 5px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">功能说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">WorkflowApplication与WorkflowInvoker在调用流程上的区别
</span></p><p><span style="font-family:宋体; font-size:10pt">在WF4.0中,可以使用WorkflowApplication与WorkflowInvoker创建并启动实例.
</span></p><p><span style="font-family:宋体; font-size:10pt">但两者在宿主中的线程方式是不一样的
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:10pt">使用WorkflowInvoker启动工作流时,工作流将附加到宿主的线程中执行
</span></p><p><span style="font-family:宋体; font-size:10pt">使用WorkflowApplication启动工作流，工作流实例将在宿主线程之外的另一个线程中运行,使用的是线程池方式
</span></p><p>
 </p><p><span style="color:red; font-family:宋体; font-size:10pt">具体见[Delay 与WF4中的线程]</span></p></td></tr></tbody></table></div><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0438_WF403.png" alt=""/><span style="font-family:宋体">
		</span></p><p style="text-align: center"><h1>WorkflowInvoker静态方式
</h1></p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:590px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">static</span> TResult Invoke&lt;TResult&gt;(<span style="color:#2b91af">Activity</span>&lt;TResult&gt; workflow);
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt"><span style="color:blue">public</span>
								<span style="color:blue">static</span>
								<span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; Invoke(<span style="color:#2b91af">Activity</span> workflow);
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt"><span style="color:blue">public</span>
								<span style="color:blue">static</span> TResult Invoke&lt;TResult&gt;(<span style="color:#2b91af">Activity</span>&lt;TResult&gt; workflow, <span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; inputs);
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt"><span style="color:blue">public</span>
								<span style="color:blue">static</span>
								<span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; Invoke(<span style="color:#2b91af">Activity</span> workflow, <span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; inputs);
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">static</span>
								<span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; Invoke(<span style="color:#2b91af">Activity</span> workflow, <span style="color:#2b91af">TimeSpan</span> timeout);
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt"><span style="color:blue">public</span>
								<span style="color:blue">static</span> TResult Invoke&lt;TResult&gt;(<span style="color:#2b91af">Activity</span>&lt;TResult&gt; workflow, <span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; inputs, <span style="color:#2b91af">TimeSpan</span> timeout);
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">static</span>
								<span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; Invoke(<span style="color:#2b91af">Activity</span> workflow, <span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; inputs, <span style="color:#2b91af">TimeSpan</span> timeout);
</span></p><p>
 </p><p><span style="font-family:宋体"><span style="font-size:9pt"><span style="color:blue">public</span>
									<span style="color:blue">static</span> TResult Invoke&lt;TResult&gt;(<span style="color:#2b91af">Activity</span>&lt;TResult&gt; workflow, <span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; inputs, <span style="color:blue">out</span>
									<span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; additionalOutputs, <span style="color:#2b91af">TimeSpan</span> timeout);</span><span style="font-size:10pt">
								</span></span></p></td></tr></tbody></table></div><p>
 </p><h2>例:得到有返回值Activity的返回值
</h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:44px"/><col style="width:546px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">流程</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">sealed</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">addActivity</span> :<span style="color:#2b91af">NativeActivity</span>&lt;<span style="color:blue">int</span>&gt;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; X { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; Y { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">void</span> Execute(<span style="color:#2b91af">NativeActivityContext</span> context)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> x = X.Get(context);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> y = Y.Get(context);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            context.SetValue(<span style="color:blue">base</span>.Result, x + y);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">调用</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">static</span>
								<span style="color:blue">void</span> staticCallActivityResult()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">var</span> p = <span style="color:blue">new</span> System.Collections.Generic.<span style="color:#2b91af">Dictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; { { <span style="color:#a31515">"X"</span>, <span style="color:brown">1</span> }, { <span style="color:#a31515">"Y"</span>, <span style="color:brown">2</span> } };
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> result = <span style="color:#2b91af">WorkflowInvoker</span>.Invoke(<span style="color:blue">new</span>
								<span style="color:#2b91af">addActivity</span>(), p);
</span></p><p>         
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(result);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0438_WF404.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><p>
 </p><h2>例:得到OutArgument
</h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:33px"/><col style="width:557px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">流程</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0438_WF405.png" alt=""/></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">调用</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">static</span>
								<span style="color:blue">void</span> staticCallOutArgument()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">var</span> p = <span style="color:blue">new</span> System.Collections.Generic.<span style="color:#2b91af">Dictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; { { <span style="color:#a31515">"X"</span>, <span style="color:brown">3</span> }, { <span style="color:#a31515">"Y"</span>, <span style="color:brown">4</span> } };
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.Collections.Generic.<span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; outArgument = <span style="color:#2b91af">WorkflowInvoker</span>.Invoke(<span style="color:blue">new</span> testWorkflow(), p);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> item <span style="color:blue">in</span> outArgument)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                System.<span style="color:#2b91af">Console</span>.WriteLine(item);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0438_WF406.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><h2>例:得到OutArgument与有返回值Activity的返回值
</h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:45px"/><col style="width:545px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">流程</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">sealed</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">resultAndOutArgumentActivity</span> : <span style="color:#2b91af">NativeActivity</span>&lt;<span style="color:blue">int</span>&gt;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; X { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; Y { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">OutArgument</span>&lt;<span style="color:blue">int</span>&gt; myValue { <span style="color:blue">set</span>; <span style="color:blue">get</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">void</span> Execute(<span style="color:#2b91af">NativeActivityContext</span> context)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> x = X.Get(context);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> y = Y.Get(context);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            context.SetValue(<span style="color:blue">base</span>.Result, x + y);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            context.SetValue(myValue, x + y);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">调用</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">static</span>
								<span style="color:blue">void</span> staticCallResultAndOutArgument()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">var</span> p = <span style="color:blue">new</span> System.Collections.Generic.<span style="color:#2b91af">Dictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; { { <span style="color:#a31515">"X"</span>, <span style="color:brown">5</span> }, { <span style="color:#a31515">"Y"</span>, <span style="color:brown">6</span> } };
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.Collections.Generic.<span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; outArgument;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> result =  <span style="color:#2b91af">WorkflowInvoker</span>.Invoke(<span style="color:blue">new</span>
								<span style="color:#2b91af">resultAndOutArgumentActivity</span>(), p,<span style="color:blue">out</span> outArgument,<span style="color:blue">new</span>
								<span style="color:#2b91af">TimeSpan</span>(<span style="color:brown">0</span>));
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">              System.<span style="color:#2b91af">Console</span>.WriteLine(result);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> item <span style="color:blue">in</span> outArgument)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">              {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                  System.<span style="color:#2b91af">Console</span>.WriteLine(item);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">              }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0438_WF407.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p style="text-align: center"><h1>WorkflowInvoker实例方式
</h1></p><p>WorkflowInvoker实例方式调用工作流时,有返回值Activity的返回值与OutArgument都由 System.Collections.Generic.Dictionary&lt;string, object&gt;集合返回
<table style="border-collapse:collapse" border="0"><colgroup><col style="width:907px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td></tr></tbody></table><p>
 </p><h2>例:得到有返回值Activity的返回值
</h2><table style="border-collapse:collapse" border="0"><colgroup><col style="width:47px"/><col style="width:544px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">流程</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">sealed</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">addActivity</span> :<span style="color:#2b91af">NativeActivity</span>&lt;<span style="color:blue">int</span>&gt;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; X { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; Y { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">void</span> Execute(<span style="color:#2b91af">NativeActivityContext</span> context)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> x = X.Get(context);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> y = Y.Get(context);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            context.SetValue(<span style="color:blue">base</span>.Result, x + y);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">调用</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">static</span>
								<span style="color:blue">void</span> callActivityResult()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">var</span> p = <span style="color:blue">new</span> System.Collections.Generic.<span style="color:#2b91af">Dictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; { { <span style="color:#a31515">"X"</span>, <span style="color:brown">7</span> }, { <span style="color:#a31515">"Y"</span>, <span style="color:brown">8</span> } };
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowInvoker</span> invoker = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowInvoker</span>(<span style="color:blue">new</span>
								<span style="color:#2b91af">addActivity</span>());
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.Collections.Generic.<span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; result = invoker.Invoke(p);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> item <span style="color:blue">in</span> result)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                System.<span style="color:#2b91af">Console</span>.WriteLine(item);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0438_WF408.png" alt=""/></p></td></tr></tbody></table><p>
 </p><p>
 </p><h2>例:得到OutArgument
</h2><table style="border-collapse:collapse" border="0"><colgroup><col style="width:33px"/><col style="width:557px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">流程</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0438_WF409.png" alt=""/></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">调用</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">static</span>
								<span style="color:blue">void</span> callOutArgument()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">var</span> p = <span style="color:blue">new</span> System.Collections.Generic.<span style="color:#2b91af">Dictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; { { <span style="color:#a31515">"X"</span>, <span style="color:brown">9</span> }, { <span style="color:#a31515">"Y"</span>, <span style="color:brown">10</span> } };
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowInvoker</span> invoker = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowInvoker</span>(<span style="color:blue">new</span>
								<span style="color:#2b91af">testWorkflow</span>());
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.Collections.Generic.<span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; outArgument = invoker.Invoke(p);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> item <span style="color:blue">in</span> outArgument)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                System.<span style="color:#2b91af">Console</span>.WriteLine(item);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0438_WF4010.png" alt=""/></p></td></tr></tbody></table><p>
 </p><h2>例:得到OutArgument与有返回值Activity的返回值
</h2><table style="border-collapse:collapse" border="0"><colgroup><col style="width:46px"/><col style="width:545px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">流程</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">sealed</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">resultAndOutArgumentActivity</span> : <span style="color:#2b91af">NativeActivity</span>&lt;<span style="color:blue">int</span>&gt;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; X { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; Y { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">OutArgument</span>&lt;<span style="color:blue">int</span>&gt; myValue { <span style="color:blue">set</span>; <span style="color:blue">get</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">void</span> Execute(<span style="color:#2b91af">NativeActivityContext</span> context)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> x = X.Get(context);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> y = Y.Get(context);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            context.SetValue(<span style="color:blue">base</span>.Result, x + y);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            context.SetValue(myValue, x + y);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">调用</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">static</span>
								<span style="color:blue">void</span> callResultAndOutArgument()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">var</span> p = <span style="color:blue">new</span> System.Collections.Generic.<span style="color:#2b91af">Dictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; { { <span style="color:#a31515">"X"</span>, <span style="color:brown">11</span> }, { <span style="color:#a31515">"Y"</span>, <span style="color:brown">12</span> } };
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowInvoker</span> invoker = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowInvoker</span>(<span style="color:blue">new</span>
								<span style="color:#2b91af">resultAndOutArgumentActivity</span>());
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.Collections.Generic.<span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; outArgument;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            outArgument = invoker.Invoke(p);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> item <span style="color:blue">in</span> outArgument)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                System.<span style="color:#2b91af">Console</span>.WriteLine(item);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0438_WF4011.png" alt=""/></p></td></tr></tbody></table><p>
 </p><h2>例:InvokeAsync方法与invokeCompleted事件
</h2><table style="border-collapse:collapse" border="0"><colgroup><col style="width:43px"/><col style="width:547px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">流程</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">sealed</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">resultAndOutArgumentActivity</span> : <span style="color:#2b91af">NativeActivity</span>&lt;<span style="color:blue">int</span>&gt;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; X { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; Y { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">OutArgument</span>&lt;<span style="color:blue">int</span>&gt; myValue { <span style="color:blue">set</span>; <span style="color:blue">get</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">void</span> Execute(<span style="color:#2b91af">NativeActivityContext</span> context)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> x = X.Get(context);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> y = Y.Get(context);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            context.SetValue(<span style="color:blue">base</span>.Result, x + y);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            context.SetValue(myValue, x + y);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">调用</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt"><span style="color:blue">        #region</span>  //async
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">static</span>
								<span style="color:blue">void</span> async()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowInvoker</span> myInvoker = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowInvoker</span>(<span style="color:blue">new</span>
								<span style="color:#2b91af">resultAndOutArgumentActivity</span>());
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">var</span> p = <span style="color:blue">new</span> System.Collections.Generic.<span style="color:#2b91af">Dictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; { { <span style="color:#a31515">"X"</span>, <span style="color:brown">13</span> }, { <span style="color:#a31515">"Y"</span>, <span style="color:brown">14</span> } };
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            myInvoker.InvokeCompleted += <span style="color:blue">new</span>
								<span style="color:#2b91af">EventHandler</span>&lt;<span style="color:#2b91af">InvokeCompletedEventArgs</span>&gt;(myInvoker_InvokeCompleted);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            myInvoker.InvokeAsync(p);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">static</span>
								<span style="color:blue">void</span> myInvoker_InvokeCompleted(<span style="color:blue">object</span> sender, <span style="color:#2b91af">InvokeCompletedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> item <span style="color:blue">in</span> e.Outputs)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                System.<span style="color:#2b91af">Console</span>.WriteLine(item);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="color:blue; font-family:微软雅黑; font-size:9pt">        #endregion
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0438_WF4012.png" alt=""/></p></td></tr></tbody></table><p>
 </p><h2>例:BeginInvoke方法与EndInvoke方法
</h2><table style="border-collapse:collapse" border="0"><colgroup><col style="width:46px"/><col style="width:545px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">流程</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">sealed</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">resultAndOutArgumentActivity</span> : <span style="color:#2b91af">NativeActivity</span>&lt;<span style="color:blue">int</span>&gt;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; X { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; Y { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">OutArgument</span>&lt;<span style="color:blue">int</span>&gt; myValue { <span style="color:blue">set</span>; <span style="color:blue">get</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">void</span> Execute(<span style="color:#2b91af">NativeActivityContext</span> context)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> x = X.Get(context);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> y = Y.Get(context);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            context.SetValue(<span style="color:blue">base</span>.Result, x + y);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            context.SetValue(myValue, x + y);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">调用</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt"><span style="color:blue">        #region</span> //begion end
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">static</span>
								<span style="color:blue">void</span> beginEnd()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowInvoker</span> myInvoker = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowInvoker</span>(<span style="color:blue">new</span>
								<span style="color:#2b91af">resultAndOutArgumentActivity</span>());
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">var</span> p = <span style="color:blue">new</span> System.Collections.Generic.<span style="color:#2b91af">Dictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; { { <span style="color:#a31515">"X"</span>, <span style="color:brown">15</span> }, { <span style="color:#a31515">"Y"</span>, <span style="color:brown">16</span> } };
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">IAsyncResult</span> ir = myInvoker.BeginInvoke(p, <span style="color:blue">new</span>
								<span style="color:#2b91af">AsyncCallback</span>(callback), myInvoker);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.Collections.Generic.<span style="color:#2b91af">IDictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; outArgument = myInvoker.EndInvoke(ir);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> item <span style="color:blue">in</span> outArgument)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                System.<span style="color:#2b91af">Console</span>.WriteLine(item);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">static</span>
								<span style="color:blue">void</span> callback(<span style="color:#2b91af">IAsyncResult</span> asyncResult)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.Threading.<span style="color:#2b91af">ManualResetEvent</span> mr = asyncResult.AsyncWaitHandle <span style="color:blue">as</span> System.Threading.<span style="color:#2b91af">ManualResetEvent</span>;
</span></p><p>           
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"callback"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="color:blue; font-family:微软雅黑; font-size:9pt">        #endregion
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0438_WF4013.png" alt=""/></p></td></tr></tbody></table><p>
 </p><h2>例:使用跟踪
</h2><table style="border-collapse:collapse" border="0"><colgroup><col style="width:907px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">// WorkflowInvoker invoker = new WorkflowInvoker(new testWorkflow());</span>
							</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//  invoker.Extensions.Add(myTracking);</span>
							</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">// invoker.Invoke();</span>
							</span></p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">具体见[Tracking 跟踪]</span></p></td></tr></tbody></table><p><span style="font-family:宋体">
			</span> </p></p><img src="http://www.cnblogs.com/foundation/aggbug/1657414.html?type=1" width="1" height="1" alt=""/><p>评论: 2　<a href="http://www.cnblogs.com/foundation/archive/2010/01/27/1657414.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/foundation/archive/2010/01/27/1657414.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/>· <a href="http://news.cnblogs.com/n/56850/" target="_blank">“谷姐”：披着“谷歌”羊皮的悲哀？</a><span style="color:gray">(2010-02-10 15:32)</span><br/>· <a href="http://news.cnblogs.com/n/56849/" target="_blank">2010，奇虎的本命年</a><span style="color:gray">(2010-02-10 15:26)</span><br/>· <a href="http://news.cnblogs.com/n/56847/" target="_blank">微软赢得Windows XP WGA诉讼</a><span style="color:gray">(2010-02-10 15:23)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>WF4.0 基础篇 (二十) ActivityWithResult 有返回值Activity</title><link>http://www.cnblogs.com/foundation/archive/2010/01/27/1657412.html</link><dc:creator>WXWinter(冬)</dc:creator><author>WXWinter(冬)</author><pubDate>Wed, 27 Jan 2010 04:36:00 GMT</pubDate><guid>http://www.cnblogs.com/foundation/archive/2010/01/27/1657412.html</guid><description><![CDATA[<p>阅读: 133 评论: 0 作者: <a href="http://www.cnblogs.com/foundation/" target="_blank">WXWinter(冬)</a> 发表于 2010-01-27 12:36 <a href="http://www.cnblogs.com/foundation/archive/2010/01/27/1657412.html" target="_blank">原文链接</a></p><p><span style="font-family:宋体">本节主要介绍</span>WF4 中 有返回值Activity的使用
</p><p>本文例子下载:
</p><p>http://files.cnblogs.com/foundation/ActivityWithResultSample.rar
</p><p>
 </p><p>本文例子说明
</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0432_WF401.png" alt=""/>
	</p><p style="text-align: center"><h1>ActivityWithResult
</h1></p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:70px"/><col style="width:520px"/></colgroup><tbody valign="top"><tr><td colspan="2" vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">类名</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">System.Activities.ActivityWithResult</span></p></td></tr><tr><td colspan="2" vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">文件</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">System.Activities.dll</span></p></td></tr><tr><td colspan="2" vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结构说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">继承Activity
</span></p><p><span style="font-family:宋体; font-size:10pt">是一个 Abstrace类
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:10pt">[Result]属性 的类型为[System.Activities.OutArgument]
</span></p><p><span style="font-family:宋体; font-size:10pt">[ResultType]属性 的类型为[System.Type]</span></p></td></tr><tr style="height: 5px"><td colspan="2" vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">功能说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">[Result]属性为返回值
</span></p><p><span style="font-family:宋体; font-size:10pt">[ResultType]属性为返回值类型
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:10pt">派生类System.Activities.Activity&lt;TResult&gt;
</span></p><p><span style="font-size:10pt"><span style="font-family:宋体">无法从System.Activities.Activity&lt;TResult&gt;实现自定义Activity,因为Activity&lt;TResult&gt;没有提供[</span><span style="font-family:Times New Roman">Execute </span><span style="font-family:宋体">方法</span><span style="font-family:Times New Roman">],</span><span style="font-family:宋体">而</span><span style="font-family:Times New Roman"> [InternalExecute </span><span style="font-family:宋体">方法是</span><span style="font-family:Times New Roman">  internal sealed ](</span><span style="font-family:宋体">具体见</span><span style="font-family:Times New Roman">[Activity</span><span style="font-family:宋体">的执行原理</span><span style="font-family:Times New Roman">])
</span></span></p><p>
 </p><p><span style="font-size:10pt"><span style="font-family:宋体">可以从</span><span style="font-family:Times New Roman">
								</span></span></p><p><span style="font-size:10pt"><span style="font-family:Times New Roman">CodeActivity</span><span style="font-family:宋体">&lt;TResult&gt;</span><span style="font-family:Times New Roman">
								</span></span></p><p><span style="font-size:10pt"><span style="font-family:Times New Roman">NativeActivity</span><span style="font-family:宋体">&lt;TResult&gt;</span><span style="font-family:Times New Roman">
								</span></span></p><p><span style="font-size:10pt"><span style="font-family:Times New Roman">AsycCodeActivity</span><span style="font-family:宋体">&lt;TResult&gt;
</span></span></p><p><span style="font-family:宋体; font-size:10pt">实现自定义Activity</span></p></td></tr></tbody></table></div><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0432_WF402.png" alt=""/>
	</p><p>
 </p><p style="text-align: center"><h1>CodeActivity<span style="font-family:宋体">&lt;TResult&gt;
</span></h1></p><p>通过override <span style="font-family:宋体">[</span>Execute 方法]以方法的返回值的方式将值返回到<span style="font-family:宋体">[Result]属性
</span></p><p>
 </p><p>例:场景说明:有两个[Int]参数x,y,返回值为x+y
</p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:41px"/><col style="width:549px"/></colgroup><tbody valign="top"><tr><td colspan="2" vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:Times New Roman; font-size:10pt">Activity</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">sealed</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">myCodeActivity</span> : <span style="color:#2b91af">CodeActivity</span>&lt;<span style="color:blue">int</span>&gt;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; X { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; Y { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p>
 </p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">int</span> Execute(<span style="color:#2b91af">CodeActivityContext</span> context)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> x = X.Get(context);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> y = Y.Get(context);
</span></p><p>
 </p><p>         
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">return</span> x + y;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//-----  or ---------</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">// context.SetValue(base.Result, x + y);</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//  return base.Result.Get(context);</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">    }</span></p></td></tr><tr><td colspan="2" vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">工作流</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0432_WF403.png" alt=""/></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">宿主</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowInvoker</span>.Invoke(<span style="color:blue">new</span>
								<span style="color:#2b91af">myCodeActivityWorkflow</span>());
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0432_WF404.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><p>
 </p><p style="text-align: center"><h1>NativeActivity<span style="font-family:宋体">&lt;TResult&gt;
</span></h1></p><p>通过为<span style="font-family:宋体">[Result]属性赋值实现
</span></p><p>
 </p><p>例:场景说明:有两个[Int]参数x,y,返回值为x+y
</p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:42px"/><col style="width:549px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:Times New Roman; font-size:10pt">Activity</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">sealed</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">myNativeActivity</span> : <span style="color:#2b91af">NativeActivity</span>&lt;<span style="color:blue">int</span>&gt;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span> System.Activities.<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; x
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        { <span style="color:blue">set</span>; <span style="color:blue">get</span>; }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span> System.Activities.<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">int</span>&gt; y
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        { <span style="color:blue">set</span>; <span style="color:blue">get</span>; }
</span></p><p>
 </p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">void</span> Execute(<span style="color:#2b91af">NativeActivityContext</span> context)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">int</span> r = (<span style="color:blue">int</span>)x.Get(context) + (<span style="color:blue">int</span>)y.Get(context);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">this</span>.Result.Set(context, r);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">工作流</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0432_WF405.png" alt=""/></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">宿主</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowInvoker</span>.Invoke(<span style="color:blue">new</span>
								<span style="color:#2b91af">myNativeActivityWorkflow</span>());
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/012710_0432_WF406.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><p>
 </p><p>
 </p><img src="http://www.cnblogs.com/foundation/aggbug/1657412.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/foundation/archive/2010/01/27/1657412.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/foundation/archive/2010/01/27/1657412.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/>· <a href="http://news.cnblogs.com/n/56850/" target="_blank">“谷姐”：披着“谷歌”羊皮的悲哀？</a><span style="color:gray">(2010-02-10 15:32)</span><br/>· <a href="http://news.cnblogs.com/n/56849/" target="_blank">2010，奇虎的本命年</a><span style="color:gray">(2010-02-10 15:26)</span><br/>· <a href="http://news.cnblogs.com/n/56847/" target="_blank">微软赢得Windows XP WGA诉讼</a><span style="color:gray">(2010-02-10 15:23)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>WF4.0 基础篇 (十九)  Persistence 持久化</title><link>http://www.cnblogs.com/foundation/archive/2010/01/15/1648611.html</link><dc:creator>WXWinter(冬)</dc:creator><author>WXWinter(冬)</author><pubDate>Fri, 15 Jan 2010 07:08:00 GMT</pubDate><guid>http://www.cnblogs.com/foundation/archive/2010/01/15/1648611.html</guid><description><![CDATA[<p>阅读: 278 评论: 5 作者: <a href="http://www.cnblogs.com/foundation/" target="_blank">WXWinter(冬)</a> 发表于 2010-01-15 15:08 <a href="http://www.cnblogs.com/foundation/archive/2010/01/15/1648611.html" target="_blank">原文链接</a></p><p><span style="font-family:宋体">本节主要介绍</span>WF4 中持久化的使用<span style="font-family:宋体">
		</span></p><p>
 </p><p><span style="font-family:宋体">本文例子下载:
</span></p><p>http://files.cnblogs.com/foundation/PersistenceSample.rar
</p><p style="text-align: center"><h1>Persistence 持久化
</h1></p><p>WF4提供了一个抽象类System.Runtime.Persistence.InstanceStore，用于定义持久化的实现.该类来自于System.Runtime.dll
</p><p>可以从InstanceStore类继承来开发Persistence Provider,持久化过程中的对实例的数据访问需要另外一个继承自System.Activities.Persistence.PersistenceParticipant
</p><p>
 </p><p>WF4提供了一个基于SQL Server的持久化类SqlWorkflowInstanceStore
</p><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/011510_0707_WF401.png" alt=""/>
	</p><p>
 </p><p>
 </p><p style="text-align: center"><h1>持久化的所有者
</h1></p><p>当只对实例进行持久化([实例.PersistableIdle = PersistableIdleAction.Persist] 或instance.Persist(),或Persist Activity),而没将实例时UnLoad时,该持久化的实例被其所有者锁定.如果对Load持久化的实例不是该实例的所有者,会报如下异常:
</p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:590px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:Times New Roman; font-size:10pt">The execution of an InstancePersistenceCommand was interrupted because the instance 'c42a0d7d-d652-404a-9734-67acb163ea48' is locked by a different instance owner. This error usually occurs because a different host has the instance loaded. The instance owner ID of the owner or host with a lock on the instance is 'c9959a30-60aa-47ae-a119-bc8ff1b97720'.</span></p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-size:10pt"><span style="font-family:宋体">因为实例</span><span style="font-family:Times New Roman">"c42a0d7d-d652-404a-9734-67acb163ea48"</span><span style="font-family:宋体">一个不同的实例的所有者被锁定，被打断了一个</span><span style="font-family:Times New Roman"> InstancePersistenceCommand </span><span style="font-family:宋体">的执行。因为不同的主机有实例加载时，通常会发生此错误。实例的拥有人或主机实例上的锁的所有者</span><span style="font-family:Times New Roman"> ID </span><span style="font-family:宋体">是</span><span style="font-family:Times New Roman"> ' c9959a30-60aa-47ae-a119-bc8ff1b97720</span><span style="font-family:宋体">。</span></span></p></td></tr></tbody></table></div><p>
 </p><p>
 </p><p style="text-align: center"><h1>关于Activity.CacheMetadata方法
</h1></p><p>注意:Activity.CacheMetadata方法会多次被调用
</p><p>流程中的Activity.CacheMetadata方法会在Run时全部调用,
</p><p>每当从持久化中Load实例时,Activity.CacheMetadata方法会再次全部调用
</p><p>
 </p><p style="text-align: center"><h1>与持久化相关的事件执行顺序
</h1></p><p>实例.PersistableIdle
</p><p>实例.Idle
</p><p>实例.Unloaded
</p><p>
 </p><p>当实例完成后,执行完[实例.Completed]后才执行[实例.Unloaded]
</p><p style="text-align: center"><h1>SqlWorkflowInstanceStore
</h1></p><h2>数据库
</h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:590px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:Times New Roman; font-size:10pt">\Windows\Microsoft.NET\Framework\v4.0.21006\SQL\en</span></p></td></tr><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:Times New Roman; font-size:10pt">SqlWorkflowInstanceStoreSchema.sql
</span></p><p><span style="font-family:Times New Roman; font-size:10pt">SqlWorkflowInstanceStoreLogic.sql</span></p></td></tr></tbody></table></div><p>
 </p><h2>SqlWorkflowInstanceStore 类
</h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:59px"/><col style="width:531px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">类名</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:Times New Roman; font-size:10pt">System.Activities.DurableInstancing.SqlWorkflowInstanceStore</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">文件</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:Times New Roman; font-size:10pt">System.Activities.DurableInstancing.dll
</span></p><p><span style="font-family:Times New Roman; font-size:10pt">System.Runtime.dll</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结构说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-size:10pt"><span style="font-family:宋体">继承 </span><span style="font-family:Times New Roman">InstanceStore</span><span style="font-family:宋体">
								</span></span></p><p><span style="font-family:宋体; font-size:10pt">是一个 sealed类
</span></p><p><span style="font-family:宋体; font-size:10pt">override 了 [BeginTryCommand方法] 与 [EndTryCommand方法]与 [OnFreeInstanceHandle方法]与 [OnNewInstanceHandle方法]
</span></p><p><span style="font-family:宋体; font-size:10pt">[ConnectionString]属性 的类型为[string]
</span></p><p><span style="font-family:宋体; font-size:10pt">[EnqueueRunCommands]属性 的类型为[bool]
</span></p><p><span style="font-family:宋体; font-size:10pt">[HostLockRenewalPeriod]属性 的类型为[TimeSpan]
</span></p><p><span style="font-family:宋体; font-size:10pt">[InstanceCompletionAction]属性 的类型为[InstanceCompletionAction]
</span></p><p><span style="font-family:宋体; font-size:10pt">[InstanceEncodingOption]属性 的类型为[InstanceEncodingOption]
</span></p><p><span style="font-family:宋体; font-size:10pt">[InstanceLockedExceptionAction]属性 的类型为[InstanceLockedExceptionAction]
</span></p><p><span style="font-family:宋体; font-size:10pt">无返回值[Promote]方法,(string name, IEnumerable&lt;XName&gt; promoteAsVariant, IEnumerable&lt;XName&gt; promoteAsBinary)</span></p></td></tr><tr style="height: 5px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">功能说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">[ConnectionString]属性 ,数据库字串
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:10pt">[EnqueueRunCommands]属性,
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:10pt">[HostLockRenewalPeriod]属性,服务宿主在指定时间内必须更新锁定时间周期
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:10pt">[InstanceCompletionAction]属性,实例完成后是否删除持久化存储中的数据，DeleteAll(默认)，DeleteNothing
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:10pt">[InstanceEncodingOption]属性,保存到持久化存储的压缩算法，None(默认),GZip,
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:10pt">[InstanceLockedExceptionAction]属性,当发生InstanceLockedException异常时(该异常发生在当他要去锁定已经被其他服务宿主锁定的实例时)的操作NoRetry(默认)，BasicRetry，AggressiveRetry
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:10pt">[Promote]方法</span></p></td></tr></tbody></table></div><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/011510_0707_WF402.png" alt=""/>
	</p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p style="text-align: center"><h1>PersistableIdleAction.Unload方式持久化
</h1></p><p>要将实例持久化，有很多种方式可以使用，其中一种就是使用[实例.PersistableIdle 回调函数]，它在实例Idle时触发。
</p><p>当 [实例.PersistableIdle = e =&gt; PersistableIdleAction.Persist],实例被持久化,但并没有被UnLoad,这时Load时要主意持久化的所有者
</p><p>当 [实例.PersistableIdle = e =&gt; PersistableIdleAction.UnLoad],实例被持久化,然后被UnLoad,这时Load时不用考虑所有者
</p><p>
 </p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:590px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//===================================================</span>
							</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowApplication</span> instance = <span style="color:blue">null</span>;
</span></p><p>
 </p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowCompleted(<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"workflowCompleted:{0}"</span>, e.CompletionState.ToString());
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowIdel(<span style="color:#2b91af">WorkflowApplicationIdleEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p>            
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Idle:{0}"</span>, e.InstanceId);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> unload(<span style="color:#2b91af">WorkflowApplicationEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"unload:{0}"</span>, e.InstanceId);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">PersistableIdleAction</span> persistableIdle(<span style="color:#2b91af">WorkflowApplicationIdleEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p>            
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"persistableIdle:{0}"</span>, e.InstanceId);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">return</span>
								<span style="color:#2b91af">PersistableIdleAction</span>.Unload;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//==================================================
</span></span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> triggering()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> bookName = textBox_bookmark.Text;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> inputValue = textBox_value.Text;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance != <span style="color:blue">null</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance.GetBookmarks().Count(p =&gt; p.BookmarkName == bookName) == <span style="color:brown">1</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    instance.ResumeBookmark(bookName, inputValue);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> create()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowApplication</span>(<span style="color:blue">new</span> FlowcharLibrary.<span style="color:#2b91af">FlowDecisionWorkflow</span>());
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> connectionString = <span style="color:#a31515">"Data Source=.;Initial Catalog=WorkflowInstanceStore;Integrated Security=True"</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">SqlWorkflowInstanceStore</span> instanceStore = <span style="color:blue">new</span>
								<span style="color:#2b91af">SqlWorkflowInstanceStore</span>(connectionString);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.InstanceStore = instanceStore;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.PersistableIdle = persistableIdle;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Idle = workflowIdel;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Unloaded = unload;
</span></p><p>            
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Completed = workflowCompleted;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            textBox_Guid.Text = instance.Id.ToString();
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Run();
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void </span>load()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowApplication</span>(<span style="color:blue">new</span> FlowcharLibrary.<span style="color:#2b91af">FlowDecisionWorkflow</span>());
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> connectionString = <span style="color:#a31515">"Data Source=.;Initial Catalog=WorkflowInstanceStore;Integrated Security=True"</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">SqlWorkflowInstanceStore</span> instanceStore = <span style="color:blue">new</span>
								<span style="color:#2b91af">SqlWorkflowInstanceStore</span>(connectionString);
</span></p><p>           
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.InstanceStore = instanceStore;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.PersistableIdle = persistableIdle;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Completed = workflowCompleted;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Unloaded = unload;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Idle = workflowIdel;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">Guid</span> guid = <span style="color:blue">new</span>
								<span style="color:#2b91af">Guid</span>(textBox_Guid.Text);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Load(guid);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:Times New Roman; font-size:10pt">
							</span> </p></td></tr></tbody></table></div><p>
 </p><p style="text-align: center"><h1>手动方式持久化
</h1></p><p>可以不使用[实例.PersistableIdle = e =&gt; PersistableIdleAction.UnLoad]的方式持久化实例而使用
</p><p>[实例.Persist方法] 与 [实例.Unload方法] 方式,
</p><p>[实例.Unload方法]会触发[实例.Unload事件]
</p><p>
 </p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:589px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span>  unload()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Persist();
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Unload();
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p></td></tr></tbody></table></div><p>
 </p><p>
 </p><p style="text-align: center"><h1>InstanceView
</h1></p><p>
 </p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:63px"/><col style="width:528px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">类名</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:Times New Roman; font-size:10pt">System.Runtime.Persistence.InstanceView</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">文件</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:Times New Roman; font-size:10pt">System.Runtime.dll</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结构说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-size:10pt"><span style="font-family:宋体">继承 </span><span style="font-family:Times New Roman">Object</span><span style="font-family:宋体">
								</span></span></p><p><span style="font-family:宋体; font-size:10pt">是一个 sealed类
</span></p><p>
 </p><p><span style="font-family:宋体; font-size:10pt">[InstanceData]属性 的类型为[ IDictionary&lt;XName, InstanceValue&gt;]
</span></p><p><span style="font-family:宋体; font-size:10pt">[InstanceDataConsistency]属性 的类型为[InstanceValueConsistency]
</span></p><p><span style="font-family:宋体; font-size:10pt">[InstanceId]属性 的类型为[Guid]
</span></p><p><span style="font-family:宋体; font-size:10pt">[InstanceKeys]属性 的类型为[ IDictionary&lt;Guid, InstanceKeyView&gt;]
</span></p><p><span style="font-family:宋体; font-size:10pt">[InstanceKeysConsistency]属性 的类型为[ InstanceValueConsistency]
</span></p><p><span style="font-family:宋体; font-size:10pt">[InstanceMetadata]属性 的类型为[ IDictionary&lt;XName, InstanceValue&gt;]
</span></p><p><span style="font-family:宋体; font-size:10pt">[InstanceMetadataConsistency]属性 的类型为[ InstanceValueConsistency ]
</span></p><p><span style="font-family:宋体; font-size:10pt">[InstanceOwner]属性 的类型为[ InstanceOwner]
</span></p><p><span style="font-family:宋体; font-size:10pt">[InstanceOwnerMetadata]属性 的类型为[IDictionary&lt;XName, InstanceValue&gt;]
</span></p><p><span style="font-family:宋体; font-size:10pt">[InstanceOwnerMetadataConsistency]属性 的类型为[InstanceValueConsistency]
</span></p><p><span style="font-family:宋体; font-size:10pt">[InstanceState]属性 的类型为[InstanceState]
</span></p><p><span style="font-family:宋体; font-size:10pt">[InstanceStoreQueryResults]属性 的类型为[ReadOnlyCollection&lt;InstanceStoreQueryResult&gt;]
</span></p><p><span style="font-family:宋体; font-size:10pt">[IsBoundToInstance]属性 的类型为[bool]
</span></p><p><span style="font-family:宋体; font-size:10pt">[IsBoundToInstanceOwner]属性 的类型为[bool]
</span></p><p><span style="font-family:宋体; font-size:10pt">[IsBoundToLock]属性 的类型为[bool]</span></p></td></tr><tr style="height: 5px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">功能说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td></tr></tbody></table></div><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/011510_0707_WF403.png" alt=""/>
	</p><p>
 </p><p>
 </p><h2>基本使用
</h2><p>
 </p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:590px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//===================================================</span>
							</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowApplication</span> instance = <span style="color:blue">null</span>;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">SqlWorkflowInstanceStore</span> instanceStore;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">InstanceView</span> view;
</span></p><p>
 </p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowCompleted(<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"workflowCompleted:{0}"</span>, e.CompletionState.ToString());
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowIdel(<span style="color:#2b91af">WorkflowApplicationIdleEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p>            
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Idle:{0}"</span>, e.InstanceId);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> unload(<span style="color:#2b91af">WorkflowApplicationEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"unload:{0}"</span>, e.InstanceId);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>    
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">PersistableIdleAction</span> persistableIdle(<span style="color:#2b91af">WorkflowApplicationIdleEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p>            
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"persistableIdle:{0}"</span>, e.InstanceId);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">return</span>
								<span style="color:#2b91af">PersistableIdleAction</span>.Unload;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//==================================================</span>
							</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void   </span>create()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowApplication</span>(<span style="color:blue">new</span> FlowcharLibrary.<span style="color:#2b91af">FlowDecisionWorkflow</span>());
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instanceStore == <span style="color:blue">null</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> connectionString = <span style="color:#a31515">"Data Source=.;Initial Catalog=WorkflowInstanceStore;Integrated Security=True"</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                instanceStore = <span style="color:blue">new</span>
								<span style="color:#2b91af">SqlWorkflowInstanceStore</span>(connectionString);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                view = instanceStore.Execute(instanceStore.CreateInstanceHandle(), <span style="color:blue">new</span>
								<span style="color:#2b91af">CreateWorkflowOwnerCommand</span>(), <span style="color:#2b91af">TimeSpan</span>.FromSeconds(<span style="color:brown">30</span>));
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                instanceStore.DefaultInstanceOwner = view.InstanceOwner;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.InstanceStore = instanceStore;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.PersistableIdle = persistableIdle;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Idle = workflowIdel;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">           instance.Unloaded = unload;
</span></p><p>            
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Completed = workflowCompleted;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            textBox_Guid.Text = instance.Id.ToString();
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Run();
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span>  load()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowApplication</span>(<span style="color:blue">new</span> FlowcharLibrary.<span style="color:#2b91af">FlowDecisionWorkflow</span>());
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instanceStore == <span style="color:blue">null</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> connectionString = <span style="color:#a31515">"Data Source=.;Initial Catalog=WorkflowInstanceStore;Integrated Security=True"</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                instanceStore = <span style="color:blue">new</span>
								<span style="color:#2b91af">SqlWorkflowInstanceStore</span>(connectionString);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                view = instanceStore.Execute(instanceStore.CreateInstanceHandle(), <span style="color:blue">new</span>
								<span style="color:#2b91af">CreateWorkflowOwnerCommand</span>(), <span style="color:#2b91af">TimeSpan</span>.FromSeconds(<span style="color:brown">30</span>));
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">                instanceStore.DefaultInstanceOwner = view.InstanceOwner;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.InstanceStore = instanceStore;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.PersistableIdle = persistableIdle;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Idle = workflowIdel;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Unloaded = unload;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Completed = workflowCompleted;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">Guid</span> guid = <span style="color:blue">new</span>
								<span style="color:#2b91af">Guid</span>(textBox_Guid.Text);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Load(guid);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span>  triggering()
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> bookName = textBox_bookmark.Text;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> inputValue = textBox_value.Text;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance != <span style="color:blue">null</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance.GetBookmarks().Count(p =&gt; p.BookmarkName == bookName) == <span style="color:brown">1</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    instance.ResumeBookmark(bookName, inputValue);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p></td></tr></tbody></table></div><p>
 </p><p>
 </p><p style="text-align: center"><h1>Persist Activity 方式持久化
</h1></p><p>使用Persist Activity，可以在其出现的位置使实例持久化，不管实例是否处于Idle状态.
</p><p>
 </p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:71px"/><col style="width:519px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">类名</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-size:10pt"><span style="font-family:宋体">System.Activities.Statements.</span><span style="font-family:Times New Roman">Persist</span></span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">文件</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">System.Activities.dll</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结构说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">继承 NativeActivity
</span></p><p><span style="font-family:宋体; font-size:10pt">是一个 sealed类
</span></p><p><span style="font-family:宋体; font-size:10pt">override 了 [CacheMetadata方法] 与 [Execute方法]
</span></p></td></tr><tr style="height: 5px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">功能说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-size:10pt"><span style="font-family:宋体">[</span><span style="font-family:Times New Roman">Persist</span><span style="font-family:宋体">] 可以触发[Idel]</span></span></p></td></tr></tbody></table></div><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/011510_0707_WF404.png" alt=""/>
	</p><p>
 </p><h2>例:基本使用
</h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:25px"/><col style="width:565px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">工作流</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/011510_0707_WF405.png" alt=""/></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">宿主</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowApplication</span> instance = <span style="color:blue">null</span>;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">SqlWorkflowInstanceStore</span> instanceStore;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">InstanceView</span> view;
</span></p><p>
 </p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowCompleted(<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"workflowCompleted:{0}"</span>, e.CompletionState.ToString());
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowIdel(<span style="color:#2b91af">WorkflowApplicationIdleEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p>            
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Idle:{0}"</span>, e.InstanceId);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> unload(<span style="color:#2b91af">WorkflowApplicationEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"unload:{0}"</span>, e.InstanceId);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>    
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//==================================================
</span></span></p><p>  
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_PersistWorkflow_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowApplication</span>(<span style="color:blue">new</span> PersistenceWindow.PersistWorkflow());
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instanceStore == <span style="color:blue">null</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> connectionString = <span style="color:#a31515">"Data Source=.;Initial Catalog=WorkflowInstanceStore;Integrated Security=True"</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                instanceStore = <span style="color:blue">new</span>
								<span style="color:#2b91af">SqlWorkflowInstanceStore</span>(connectionString);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                view = instanceStore.Execute(instanceStore.CreateInstanceHandle(), <span style="color:blue">new</span>
								<span style="color:#2b91af">CreateWorkflowOwnerCommand</span>(), <span style="color:#2b91af">TimeSpan</span>.FromSeconds(<span style="color:brown">30</span>));
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                instanceStore.DefaultInstanceOwner = view.InstanceOwner;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.InstanceStore = instanceStore;
</span></p><p> 
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Idle = workflowIdel;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Unloaded = unload;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Completed = workflowCompleted;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            textBox_Guid.Text = instance.Id.ToString();
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Run();
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/011510_0707_WF406.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><img src="http://www.cnblogs.com/foundation/aggbug/1648611.html?type=1" width="1" height="1" alt=""/><p>评论: 5　<a href="http://www.cnblogs.com/foundation/archive/2010/01/15/1648611.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/foundation/archive/2010/01/15/1648611.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/>· <a href="http://news.cnblogs.com/n/56850/" target="_blank">“谷姐”：披着“谷歌”羊皮的悲哀？</a><span style="color:gray">(2010-02-10 15:32)</span><br/>· <a href="http://news.cnblogs.com/n/56849/" target="_blank">2010，奇虎的本命年</a><span style="color:gray">(2010-02-10 15:26)</span><br/>· <a href="http://news.cnblogs.com/n/56847/" target="_blank">微软赢得Windows XP WGA诉讼</a><span style="color:gray">(2010-02-10 15:23)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>WF4.0 基础篇 (十八) Flowchar</title><link>http://www.cnblogs.com/foundation/archive/2010/01/08/1642615.html</link><dc:creator>WXWinter(冬)</dc:creator><author>WXWinter(冬)</author><pubDate>Fri, 08 Jan 2010 13:12:00 GMT</pubDate><guid>http://www.cnblogs.com/foundation/archive/2010/01/08/1642615.html</guid><description><![CDATA[<p>阅读: 295 评论: 2 作者: <a href="http://www.cnblogs.com/foundation/" target="_blank">WXWinter(冬)</a> 发表于 2010-01-08 21:12 <a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642615.html" target="_blank">原文链接</a></p><p><span style="font-family:宋体">本节主要介绍</span>WF4 中 Flowchart的使用<span style="font-family:宋体">
		</span></p><p>
 </p><p><span style="font-family:宋体">本文例子下载:
</span></p><p><span style="font-family:宋体">http://files.cnblogs.com/foundation/FlowcharSample.rar
</span></p><p><span style="font-family:宋体">本文例子说明
</span></p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1311_WF401.png" alt=""/>
	</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1311_WF402.png" alt=""/>
	</p><p>
 </p><p style="text-align: center"><h1>Flowchart 说明 
</h1></p><h2>Flowchart
</h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:70px"/><col style="width:521px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">类名</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-size:10pt"><span style="font-family:宋体">System.Activities.Statements.</span><span style="font-family:Times New Roman">Flowchart</span></span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">文件</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">System.Activities.dll</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结构说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">继承 NativeActivity
</span></p><p><span style="font-family:宋体; font-size:10pt">是一个 sealed类
</span></p><p><span style="font-family:宋体; font-size:10pt">override 了 [CacheMetadata方法] 与 [Execute方法]
</span></p><p><span style="font-family:宋体; font-size:10pt">[Variables]属性 的类型为[ Collection&lt;Variable&gt;]
</span></p><p><span style="font-family:宋体; font-size:10pt">[StartNode]属性 的类型为[FlowNode]
</span></p><p><span style="font-family:宋体; font-size:10pt">[Nodes]属性 的类型为[Collection&lt;FlowNode&gt;]</span></p></td></tr><tr style="height: 5px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">功能说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td></tr></tbody></table></div><p>
 </p><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1311_WF403.png" alt=""/>
	</p><p>
 </p><h2>FlowDecision
</h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:68px"/><col style="width:522px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">类名</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-size:10pt"><span style="font-family:宋体">System.Activities.Statements.</span><span style="font-family:Times New Roman">FlowDecision</span></span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">文件</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">System.Activities.dll</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结构说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-size:10pt"><span style="font-family:宋体">继承 </span><span style="font-family:Times New Roman">FlowNode</span><span style="font-family:宋体">
								</span></span></p><p><span style="font-family:宋体; font-size:10pt">是一个 sealed类
</span></p><p><span style="font-family:宋体; font-size:10pt">[Condition]属性 的类型为[Activity&lt;bool&gt;]
</span></p><p><span style="font-family:宋体; font-size:10pt">[False]属性 的类型为[FlowNode]
</span></p><p><span style="font-family:宋体; font-size:10pt">[True]属性 的类型为[FlowNode]</span></p></td></tr><tr style="height: 5px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">功能说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td></tr></tbody></table></div><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1311_WF404.png" alt=""/>
	</p><p>
 </p><p>
 </p><p>
 </p><h2>FlowSwitch
</h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:69px"/><col style="width:521px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">类名</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-size:10pt"><span style="font-family:宋体">System.Activities.Statements.</span><span style="font-family:Times New Roman">FlowSwitch</span></span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">文件</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">System.Activities.dll</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结构说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-size:10pt"><span style="font-family:宋体">继承 </span><span style="font-family:Times New Roman">FlowNode</span><span style="font-family:宋体">
								</span></span></p><p><span style="font-family:宋体; font-size:10pt">是一个 sealed类
</span></p><p><span style="font-family:宋体; font-size:10pt">[Expression]属性 的类型为[Activity&lt;object&gt;]
</span></p><p><span style="font-family:宋体; font-size:10pt">[Default]属性 的类型为[FlowNode]
</span></p><p><span style="font-family:宋体; font-size:10pt">[Cases]属性 的类型为[IDictionary&lt;object, FlowNode&gt;]
</span></p></td></tr><tr style="height: 5px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">功能说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td></tr></tbody></table></div><p>
 </p><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1311_WF405.png" alt=""/>
	</p><p>
 </p><h2>FlowStep
</h2><p>
 </p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:68px"/><col style="width:523px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">类名</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-size:10pt"><span style="font-family:宋体">System.Activities.Statements.</span><span style="font-family:Times New Roman">FlowStep</span></span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">文件</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:宋体; font-size:10pt">System.Activities.dll</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结构说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-size:10pt"><span style="font-family:宋体">继承 </span><span style="font-family:Times New Roman">FlowNode</span><span style="font-family:宋体">
								</span></span></p><p><span style="font-family:宋体; font-size:10pt">是一个 sealed类
</span></p><p><span style="font-family:宋体; font-size:10pt">[Action]属性 的类型为[Activity]
</span></p><p><span style="font-family:宋体; font-size:10pt">[Next]属性 的类型为[FlowNode]</span></p></td></tr><tr style="height: 5px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">功能说明</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"> </td></tr></tbody></table></div><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1311_WF406.png" alt=""/>
	</p><p>
 </p><p style="text-align: center"><h1>例
</h1></p><h2>Flowchart基本使用
</h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:25px"/><col style="width:565px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">工作流</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1311_WF407.png" alt=""/></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">宿主</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//===================================================</span>
							</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowApplication</span> instance = <span style="color:blue">null</span>;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_triggering_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> bookName = textBox_bookmark.Text;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> inputValue = textBox_value.Text;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance != <span style="color:blue">null</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance.GetBookmarks().Count(p =&gt; p.BookmarkName == bookName) == <span style="color:brown">1</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    instance.ResumeBookmark(bookName, inputValue);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">else</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> v <span style="color:blue">in</span> instance.GetBookmarks())
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    {
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"-------</span></span><span style="font-family:宋体">请从下面选项中选择一</span><span style="font-family:微软雅黑"><span style="color:#a31515">BookmarkName---------------------------"</span>);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"BookmarkName:{0}:,OwnerDisplayName:{1}"</span>, v.BookmarkName, v.OwnerDisplayName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"================================"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">else</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">
									<span style="color:#2b91af">MessageBox</span>.Show(<span style="color:#a31515">"</span></span><span style="font-family:宋体">没有创建实例</span><span style="font-family:微软雅黑"><span style="color:#a31515">"</span>);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowCompleted(<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"workflowCompleted:{0}"</span>, e.CompletionState.ToString());
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> aborted(<span style="color:#2b91af">WorkflowApplicationAbortedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"aborted ,Reason:{0}"</span>, e.Reason.Message);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">UnhandledExceptionAction</span> unhandledExceptionl(<span style="color:#2b91af">WorkflowApplicationUnhandledExceptionEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"unhandledException:{0}"</span>, e.UnhandledException.Message);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">return</span>
								<span style="color:#2b91af">UnhandledExceptionAction</span>.Cancel;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowIdel(<span style="color:#2b91af">WorkflowApplicationIdleEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Idle:{0}"</span>, e.InstanceId);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"--------BookmarkName---------------------------"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> item <span style="color:blue">in</span> e.Bookmarks)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"{0}"</span>, item.BookmarkName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"================================"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//==================================================</span>
							</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_baseFlowchartWorkflow_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowApplication</span>(<span style="color:blue">new</span> FlowcharLibrary.<span style="color:#2b91af">baseFlowchartWorkflow</span>());
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Completed = <span style="color:blue">new</span>
								<span style="color:#2b91af">Action</span>&lt;<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span>&gt;(workflowCompleted);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.OnUnhandledException = unhandledExceptionl;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Aborted = aborted;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Idle = workflowIdel;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Run();
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1311_WF408.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><h2>FlowDecision 例子
</h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:42px"/><col style="width:548px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">工作流</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1311_WF409.png" alt=""/></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:Times New Roman; font-size:10pt">bookmark</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt"><span style="color:blue">public</span>
								<span style="color:blue">sealed</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">bookmark</span>&lt;T&gt; : <span style="color:#2b91af">NativeActivity</span>&lt;T&gt;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">string</span>&gt; bookmarkName { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">bool</span> CanInduceIdle
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">get</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            { <span style="color:blue">return</span>
								<span style="color:blue">true</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">void</span> Execute(<span style="color:#2b91af">NativeActivityContext</span> context)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> bookmark = context.GetValue(bookmarkName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            context.CreateBookmark(bookmark, <span style="color:blue">new</span>
								<span style="color:#2b91af">BookmarkCallback</span>(bookmarkCallback));
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"</span></span><span style="font-family:宋体">创建</span><span style="font-family:微软雅黑"><span style="color:#a31515">bookmark:{0}"</span>, bookmark);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> bookmarkCallback(<span style="color:#2b91af">NativeActivityContext</span> context, <span style="color:#2b91af">Bookmark</span> bookmark, <span style="color:blue">object</span> obj)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p> 
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (<span style="color:blue">typeof</span>(T) == <span style="color:blue">typeof</span>(<span style="color:#2b91af">Int32</span>))
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">this</span>.Result.Set(context, <span style="color:blue">int</span>.Parse(obj.ToString()) );
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">return</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (<span style="color:blue">typeof</span>(T) == <span style="color:blue">typeof</span>(<span style="color:blue">string</span>))
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">this</span>.Result.Set(context, obj.ToString());
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">return</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">this</span>.Result.Set(context,obj);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    }</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">宿主</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//===================================================</span>
							</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowApplication</span> instance = <span style="color:blue">null</span>;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_triggering_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> bookName = textBox_bookmark.Text;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> inputValue = textBox_value.Text;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance != <span style="color:blue">null</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance.GetBookmarks().Count(p =&gt; p.BookmarkName == bookName) == <span style="color:brown">1</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    instance.ResumeBookmark(bookName, inputValue);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">else</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> v <span style="color:blue">in</span> instance.GetBookmarks())
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    {
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"-------</span></span><span style="font-family:宋体">请从下面选项中选择一</span><span style="font-family:微软雅黑"><span style="color:#a31515">BookmarkName---------------------------"</span>);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"BookmarkName:{0}:,OwnerDisplayName:{1}"</span>, v.BookmarkName, v.OwnerDisplayName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"================================"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">else</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">
									<span style="color:#2b91af">MessageBox</span>.Show(<span style="color:#a31515">"</span></span><span style="font-family:宋体">没有创建实例</span><span style="font-family:微软雅黑"><span style="color:#a31515">"</span>);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowCompleted(<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"workflowCompleted:{0}"</span>, e.CompletionState.ToString());
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> aborted(<span style="color:#2b91af">WorkflowApplicationAbortedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"aborted ,Reason:{0}"</span>, e.Reason.Message);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">UnhandledExceptionAction</span> unhandledExceptionl(<span style="color:#2b91af">WorkflowApplicationUnhandledExceptionEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"unhandledException:{0}"</span>, e.UnhandledException.Message);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">return</span>
								<span style="color:#2b91af">UnhandledExceptionAction</span>.Cancel;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowIdel(<span style="color:#2b91af">WorkflowApplicationIdleEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Idle:{0}"</span>, e.InstanceId);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"--------BookmarkName---------------------------"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> item <span style="color:blue">in</span> e.Bookmarks)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"{0}"</span>, item.BookmarkName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"================================"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//==================================================</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_FlowDecisionWorkflow_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowApplication</span>(<span style="color:blue">new</span> FlowcharLibrary.<span style="color:#2b91af">FlowDecisionWorkflow</span>());
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Completed = <span style="color:blue">new</span>
								<span style="color:#2b91af">Action</span>&lt;<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span>&gt;(workflowCompleted);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.OnUnhandledException = unhandledExceptionl;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Aborted = aborted;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Idle = workflowIdel;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Run();
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
							</span> </p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1311_WF4010.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><h2>FlowSwitch 例子
</h2><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:45px"/><col style="width:545px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">工作流</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1311_WF4011.png" alt=""/></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:Times New Roman; font-size:10pt">bookmark</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt"><span style="color:blue">public</span>
								<span style="color:blue">sealed</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">bookmark</span>&lt;T&gt; : <span style="color:#2b91af">NativeActivity</span>&lt;T&gt;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">string</span>&gt; bookmarkName { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">bool</span> CanInduceIdle
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">get</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            { <span style="color:blue">return</span>
								<span style="color:blue">true</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">void</span> Execute(<span style="color:#2b91af">NativeActivityContext</span> context)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> bookmark = context.GetValue(bookmarkName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            context.CreateBookmark(bookmark, <span style="color:blue">new</span>
								<span style="color:#2b91af">BookmarkCallback</span>(bookmarkCallback));
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"</span></span><span style="font-family:宋体">创建</span><span style="font-family:微软雅黑"><span style="color:#a31515">bookmark:{0}"</span>, bookmark);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> bookmarkCallback(<span style="color:#2b91af">NativeActivityContext</span> context, <span style="color:#2b91af">Bookmark</span> bookmark, <span style="color:blue">object</span> obj)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p> 
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (<span style="color:blue">typeof</span>(T) == <span style="color:blue">typeof</span>(<span style="color:#2b91af">Int32</span>))
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">this</span>.Result.Set(context, <span style="color:blue">int</span>.Parse(obj.ToString()) );
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">return</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (<span style="color:blue">typeof</span>(T) == <span style="color:blue">typeof</span>(<span style="color:blue">string</span>))
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">this</span>.Result.Set(context, obj.ToString());
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">return</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">this</span>.Result.Set(context,obj);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    }</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">宿主</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//===================================================</span>
							</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowApplication</span> instance = <span style="color:blue">null</span>;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_triggering_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> bookName = textBox_bookmark.Text;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> inputValue = textBox_value.Text;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance != <span style="color:blue">null</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance.GetBookmarks().Count(p =&gt; p.BookmarkName == bookName) == <span style="color:brown">1</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    instance.ResumeBookmark(bookName, inputValue);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">else</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> v <span style="color:blue">in</span> instance.GetBookmarks())
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    {
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"-------</span></span><span style="font-family:宋体">请从下面选项中选择一</span><span style="font-family:微软雅黑"><span style="color:#a31515">BookmarkName---------------------------"</span>);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"BookmarkName:{0}:,OwnerDisplayName:{1}"</span>, v.BookmarkName, v.OwnerDisplayName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"================================"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">else</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">
									<span style="color:#2b91af">MessageBox</span>.Show(<span style="color:#a31515">"</span></span><span style="font-family:宋体">没有创建实例</span><span style="font-family:微软雅黑"><span style="color:#a31515">"</span>);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowCompleted(<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"workflowCompleted:{0}"</span>, e.CompletionState.ToString());
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> aborted(<span style="color:#2b91af">WorkflowApplicationAbortedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"aborted ,Reason:{0}"</span>, e.Reason.Message);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">UnhandledExceptionAction</span> unhandledExceptionl(<span style="color:#2b91af">WorkflowApplicationUnhandledExceptionEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"unhandledException:{0}"</span>, e.UnhandledException.Message);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">return</span>
								<span style="color:#2b91af">UnhandledExceptionAction</span>.Cancel;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowIdel(<span style="color:#2b91af">WorkflowApplicationIdleEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Idle:{0}"</span>, e.InstanceId);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"--------BookmarkName---------------------------"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> item <span style="color:blue">in</span> e.Bookmarks)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"{0}"</span>, item.BookmarkName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"================================"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//==================================================</span>
							</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_FlowSwitchWorkflow_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowApplication</span>(<span style="color:blue">new</span> FlowcharLibrary.<span style="color:#2b91af">FlowSwitchWorkflow</span>());
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Completed = <span style="color:blue">new</span>
								<span style="color:#2b91af">Action</span>&lt;<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span>&gt;(workflowCompleted);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.OnUnhandledException = unhandledExceptionl;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Aborted = aborted;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Idle = workflowIdel;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Run();
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1311_WF4012.png" alt=""/><span style="font-family:Times New Roman; font-size:10pt">
							</span></p><p>
 </p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1311_WF4013.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><img src="http://www.cnblogs.com/foundation/aggbug/1642615.html?type=1" width="1" height="1" alt=""/><p>评论: 2　<a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642615.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642615.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/>· <a href="http://news.cnblogs.com/n/56850/" target="_blank">“谷姐”：披着“谷歌”羊皮的悲哀？</a><span style="color:gray">(2010-02-10 15:32)</span><br/>· <a href="http://news.cnblogs.com/n/56849/" target="_blank">2010，奇虎的本命年</a><span style="color:gray">(2010-02-10 15:26)</span><br/>· <a href="http://news.cnblogs.com/n/56847/" target="_blank">微软赢得Windows XP WGA诉讼</a><span style="color:gray">(2010-02-10 15:23)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>WF4.0 基础篇 (十七) Bookmark</title><link>http://www.cnblogs.com/foundation/archive/2010/01/08/1642614.html</link><dc:creator>WXWinter(冬)</dc:creator><author>WXWinter(冬)</author><pubDate>Fri, 08 Jan 2010 13:11:00 GMT</pubDate><guid>http://www.cnblogs.com/foundation/archive/2010/01/08/1642614.html</guid><description><![CDATA[<p>阅读: 276 评论: 1 作者: <a href="http://www.cnblogs.com/foundation/" target="_blank">WXWinter(冬)</a> 发表于 2010-01-08 21:11 <a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642614.html" target="_blank">原文链接</a></p><p><span style="font-family:宋体">本节主要介绍WF4中无返回值</span>Bookmark与有返回值Bookmark,以及Bookmark在parallel,ParallelForEach,ForEach中<span style="font-family:宋体">的使用.
</span></p><p>
 </p><p><span style="font-family:宋体">本文例子下载:
</span></p><p><span style="font-family:宋体">http://files.cnblogs.com/foundation/BookmarkSample.rar
</span></p><p><span style="font-family:宋体">本文例子说明
</span></p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1310_WF401.png" alt=""/>
	</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1310_WF402.png" alt=""/>
	</p><p style="text-align: center"><h1>Bookmark
</h1></p><p>Bookmark可使用流程Idle并触发实例的OnIdle
</p><p>
 </p><h2>无返回值Bookmark
</h2><p>要定义具备Bookmark的Activit,可从 NativeActivity继承,override [Execute 方法],使用[NativeActivityContext.CreateBookmark方法]添加Bookmark
</p><p>需要override [ CanInduceIdle 属性],使其返回值为[True]
</p><p>可用[实例.ResumeBookmark方法]触发Bookmark
</p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:590px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">sealed</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">noResultBookmark</span> : <span style="color:#2b91af">NativeActivity</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">string</span>&gt; bookmarkName { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">bool</span> CanInduceIdle
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">get</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {    <span style="color:blue">return</span>
								<span style="color:blue">true</span>;    }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">void</span> Execute(<span style="color:#2b91af">NativeActivityContext</span> context)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> bookmark = context.GetValue(bookmarkName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            context.CreateBookmark(bookmark);
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">             System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"</span></span><span style="font-family:宋体">创建</span><span style="font-family:微软雅黑"><span style="color:#a31515">bookmark:{0}"</span>, bookmark);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    }
</span></p></td></tr></tbody></table></div><p>
 </p><h3>例:基本使用
</h3><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:66px"/><col style="width:898px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">流程</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1310_WF403.png" alt=""/></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">宿主</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//===================================================</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowCompleted(<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"workflowCompleted:{0}"</span>, e.CompletionState.ToString());
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> aborted(<span style="color:#2b91af">WorkflowApplicationAbortedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"aborted ,Reason:{0}"</span>, e.Reason.Message);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">UnhandledExceptionAction</span> unhandledExceptionl(<span style="color:#2b91af">WorkflowApplicationUnhandledExceptionEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"unhandledException:{0}"</span>, e.UnhandledException.Message);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">return</span>
								<span style="color:#2b91af">UnhandledExceptionAction</span>.Cancel;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowIdel(<span style="color:#2b91af">WorkflowApplicationIdleEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">         {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Idle:{0}"</span>, e.InstanceId);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">             System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"--------BookmarkName---------------------------"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> item <span style="color:blue">in</span> e.Bookmarks)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                 System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"{0}"</span>, item.BookmarkName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"================================"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">         }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//==================================================</span>
							</span></p><p>        
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowApplication</span> instance = <span style="color:blue">null</span>;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_Run_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             instance = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowApplication</span>(<span style="color:blue">new</span> WFLibrary.<span style="color:#2b91af">noResultBookmarkWorkflow</span>());
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Completed = <span style="color:blue">new</span>
								<span style="color:#2b91af">Action</span>&lt;<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span>&gt;(workflowCompleted);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.OnUnhandledException = unhandledExceptionl;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Aborted = aborted;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Idle = workflowIdel;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Run();
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_triggering_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> bookName = textBoxBookmark.Text;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance != <span style="color:blue">null</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance.GetBookmarks().Count(p =&gt; p.BookmarkName == bookName) == <span style="color:brown">1</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    instance.ResumeBookmark(bookName, <span style="color:blue">null</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">else</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> v <span style="color:blue">in</span> instance.GetBookmarks())
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    {
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"--------</span></span><span style="font-family:宋体">请从下面选项中选择一</span><span style="font-family:微软雅黑"><span style="color:#a31515">BookmarkName---------------------------"</span>);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"BookmarkName:{0}:,OwnerDisplayName:{1}"</span>, v.BookmarkName, v.OwnerDisplayName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"================================"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">else</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">
									<span style="color:#2b91af">MessageBox</span>.Show(<span style="color:#a31515">"</span></span><span style="font-family:宋体">没有创</span><span style="color:#a31515"><span style="font-family:微软雅黑">ä</span><span style="font-family:宋体">建实例</span><span style="font-family:微软雅黑">"</span></span><span style="font-family:微软雅黑">);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1310_WF404.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><h2>有返回值Bookmark
</h2><p>要定义具备Bookmark的Activit,可从 NativeActivity&lt;T&gt; 继承,override [Execute 方法],使用[NativeActivityContext.CreateBookmark方法]添加Bookmark
</p><p>需要override [ CanInduceIdle 属性],使其返回值为[True]
</p><p>可用[实例.ResumeBookmark方法]触发Bookmark
</p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:590px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:blue">sealed</span>
								<span style="color:blue">class</span>
								<span style="color:#2b91af">resultBookmark</span>&lt;T&gt; :  <span style="color:#2b91af">NativeActivity</span>&lt;T&gt;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">public</span>
								<span style="color:#2b91af">InArgument</span>&lt;<span style="color:blue">string</span>&gt; bookmarkName { <span style="color:blue">get</span>; <span style="color:blue">set</span>; }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">bool</span> CanInduceIdle
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">get</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {     <span style="color:blue">return</span>
								<span style="color:blue">true</span>;        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">protected</span>
								<span style="color:blue">override</span>
								<span style="color:blue">void</span> Execute(<span style="color:#2b91af">NativeActivityContext</span> context)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> bookmark = context.GetValue(bookmarkName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            context.CreateBookmark(bookmark,<span style="color:blue">new</span>
								<span style="color:#2b91af">BookmarkCallback</span>(bookmarkCallback));
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"</span></span><span style="font-family:宋体">创建</span><span style="font-family:微软雅黑"><span style="color:#a31515">bookmark:{0}"</span>, bookmark);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> bookmarkCallback(<span style="color:#2b91af">NativeActivityContext</span> context, <span style="color:#2b91af">Bookmark</span> bookmark, <span style="color:blue">object</span> obj)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">this</span>.Result.Set(context, (T)obj);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">    }</span></p></td></tr></tbody></table></div><p>
 </p><h3>例:基本使用
</h3><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:66px"/><col style="width:898px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">流程</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1310_WF405.png" alt=""/></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">宿主</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//===================================================</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowCompleted(<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"workflowCompleted:{0}"</span>, e.CompletionState.ToString());
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> aborted(<span style="color:#2b91af">WorkflowApplicationAbortedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"aborted ,Reason:{0}"</span>, e.Reason.Message);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">UnhandledExceptionAction</span> unhandledExceptionl(<span style="color:#2b91af">WorkflowApplicationUnhandledExceptionEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"unhandledException:{0}"</span>, e.UnhandledException.Message);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">return</span>
								<span style="color:#2b91af">UnhandledExceptionAction</span>.Cancel;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowIdel(<span style="color:#2b91af">WorkflowApplicationIdleEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">         {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Idle:{0}"</span>, e.InstanceId);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">             System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"--------BookmarkName---------------------------"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> item <span style="color:blue">in</span> e.Bookmarks)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                 System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"{0}"</span>, item.BookmarkName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"================================"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">         }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//==================================================</span>
							</span></p><p>        
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowApplication</span> instance = <span style="color:blue">null</span>;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_Run_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowApplication</span>(<span style="color:blue">new</span> WFLibrary.<span style="color:#2b91af">resultBookmarkWorkflow</span>());<span style="color:#2b91af">
								</span></span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Completed = <span style="color:blue">new</span>
								<span style="color:#2b91af">Action</span>&lt;<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span>&gt;(workflowCompleted);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.OnUnhandledException = unhandledExceptionl;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Aborted = aborted;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Idle = workflowIdel;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Run();
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_triggering_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> bookName = textBoxBookmark.Text;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> inputValue = textBox_Value.Text;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance != <span style="color:blue">null</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance.GetBookmarks().Count(p =&gt; p.BookmarkName == bookName) == <span style="color:brown">1</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    instance.ResumeBookmark(bookName,inputValue );
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">else</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> v <span style="color:blue">in</span> instance.GetBookmarks())
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    {
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"--------</span></span><span style="font-family:宋体">请从下面选项中选择一</span><span style="font-family:微软雅黑"><span style="color:#a31515">BookmarkName---------------------------"</span>);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"BookmarkName:{0}:,OwnerDisplayName:{1}"</span>, v.BookmarkName, v.OwnerDisplayName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"================================"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">else</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">
									<span style="color:#2b91af">MessageBox</span>.Show(<span style="color:#a31515">"</span></span><span style="font-family:宋体">没有创建实例</span><span style="font-family:微软雅黑"><span style="color:#a31515">"</span>);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1310_WF406.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><h3>例:在parallel中使用Bookmark
</h3><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:47px"/><col style="width:1077px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">流程</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1310_WF407.png" alt=""/></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">宿主</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//===================================================</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowCompleted(<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"workflowCompleted:{0}"</span>, e.CompletionState.ToString());
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> aborted(<span style="color:#2b91af">WorkflowApplicationAbortedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"aborted ,Reason:{0}"</span>, e.Reason.Message);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">UnhandledExceptionAction</span> unhandledExceptionl(<span style="color:#2b91af">WorkflowApplicationUnhandledExceptionEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"unhandledException:{0}"</span>, e.UnhandledException.Message);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">return</span>
								<span style="color:#2b91af">UnhandledExceptionAction</span>.Cancel;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowIdel(<span style="color:#2b91af">WorkflowApplicationIdleEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">         {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Idle:{0}"</span>, e.InstanceId);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">             System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"--------BookmarkName---------------------------"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> item <span style="color:blue">in</span> e.Bookmarks)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                 System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"{0}"</span>, item.BookmarkName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"================================"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">         }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//==================================================</span>
							</span></p><p>        
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowApplication</span> instance = <span style="color:blue">null</span>;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_Run_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowApplication</span>(<span style="color:blue">new</span> WFLibrary.<span style="color:#2b91af">parallelBookmarkWorkflow</span>());<span style="color:#2b91af">
								</span></span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Completed = <span style="color:blue">new</span>
								<span style="color:#2b91af">Action</span>&lt;<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span>&gt;(workflowCompleted);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.OnUnhandledException = unhandledExceptionl;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Aborted = aborted;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Idle = workflowIdel;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Run();
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_triggering_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> bookName = textBoxBookmark.Text;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> inputValue = textBox_Value.Text;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance != <span style="color:blue">null</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance.GetBookmarks().Count(p =&gt; p.BookmarkName == bookName) == <span style="color:brown">1</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    instance.ResumeBookmark(bookName,inputValue );
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">else</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> v <span style="color:blue">in</span> instance.GetBookmarks())
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    {
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"--------</span></span><span style="font-family:宋体">请从下面选项中选择一</span><span style="font-family:微软雅黑"><span style="color:#a31515">BookmarkName---------------------------"</span>);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"BookmarkName:{0}:,OwnerDisplayName:{1}"</span>, v.BookmarkName, v.OwnerDisplayName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"================================"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">else</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">
									<span style="color:#2b91af">MessageBox</span>.Show(<span style="color:#a31515">"</span></span><span style="font-family:宋体">没有创建实例</span><span style="font-family:微软雅黑"><span style="color:#a31515">"</span>);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1310_WF408.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><h3>例:在ParallelForEach中使用Bookmark
</h3><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:47px"/><col style="width:1077px"/></colgroup><tbody valign="top"><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">流程</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><span style="font-size:10pt"><span style="font-family:宋体">参数</span><span style="font-family:Times New Roman">
								</span></span></p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1310_WF409.png" alt=""/><span style="font-family:Times New Roman; font-size:10pt">
							</span></p><p>
 </p><p><span style="font-size:10pt"><span style="font-family:宋体">变量</span><span style="font-family:Times New Roman">
								</span></span></p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1310_WF4010.png" alt=""/><span style="font-family:Times New Roman; font-size:10pt">
							</span></p><p>
 </p><p><span style="font-size:10pt"><span style="font-family:宋体">流程</span><span style="font-family:Times New Roman">
								</span></span></p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1310_WF4011.png" alt=""/><span style="font-family:Times New Roman; font-size:10pt">
							</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">宿主</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//===================================================</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowCompleted(<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"workflowCompleted:{0}"</span>, e.CompletionState.ToString());
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> aborted(<span style="color:#2b91af">WorkflowApplicationAbortedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">null</span>;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"aborted ,Reason:{0}"</span>, e.Reason.Message);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">UnhandledExceptionAction</span> unhandledExceptionl(<span style="color:#2b91af">WorkflowApplicationUnhandledExceptionEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"unhandledException:{0}"</span>, e.UnhandledException.Message);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">return</span>
								<span style="color:#2b91af">UnhandledExceptionAction</span>.Cancel;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">void</span> workflowIdel(<span style="color:#2b91af">WorkflowApplicationIdleEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">         {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"Idle:{0}"</span>, e.InstanceId);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">             System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"--------BookmarkName---------------------------"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> item <span style="color:blue">in</span> e.Bookmarks)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                 System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"{0}"</span>, item.BookmarkName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">             System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"================================"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">         }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:green">//==================================================</span>
							</span></p><p>        
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:#2b91af">WorkflowApplication</span> instance = <span style="color:blue">null</span>;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_Run_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p>           
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            System.Collections.Generic.<span style="color:#2b91af">SortedSet</span>&lt;<span style="color:blue">string</span>&gt; nameList = <span style="color:blue">new</span>
								<span style="color:#2b91af">SortedSet</span>&lt;<span style="color:blue">string</span>&gt;();
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            nameList.Add(<span style="color:#a31515">"wxd"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            nameList.Add(<span style="color:#a31515">"wxwinter"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            nameList.Add(<span style="color:#a31515">"lzm"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            nameList.Add(<span style="color:#a31515">"dd"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            System.Collections.Generic.<span style="color:#2b91af">Dictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt; dictionary = <span style="color:blue">new</span>
								<span style="color:#2b91af">Dictionary</span>&lt;<span style="color:blue">string</span>, <span style="color:blue">object</span>&gt;();
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            dictionary.Add(<span style="color:#a31515">"myNameList"</span>, nameList);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance = <span style="color:blue">new</span>
								<span style="color:#2b91af">WorkflowApplication</span>(<span style="color:blue">new</span> WFLibrary.<span style="color:#2b91af">ParallelForEachWorkflow</span>(), dictionary);
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Completed = <span style="color:blue">new</span>
								<span style="color:#2b91af">Action</span>&lt;<span style="color:#2b91af">WorkflowApplicationCompletedEventArgs</span>&gt;(workflowCompleted);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.OnUnhandledException = unhandledExceptionl;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Aborted = aborted;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Idle = workflowIdel;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            instance.Run();
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">        }
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">private</span>
								<span style="color:blue">void</span> button_triggering_Click(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> bookName = textBoxBookmark.Text;
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">string</span> inputValue = textBox_Value.Text;
</span></p><p>
 </p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance != <span style="color:blue">null</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">if</span> (instance.GetBookmarks().Count(p =&gt; p.BookmarkName == bookName) == <span style="color:brown">1</span>)
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    instance.ResumeBookmark(bookName,inputValue );
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">else</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                {
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">foreach</span> (<span style="color:blue">var</span> v <span style="color:blue">in</span> instance.GetBookmarks())
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    {
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"--------</span></span><span style="font-family:宋体">请从下面选项中选择一</span><span style="font-family:微软雅黑"><span style="color:#a31515">BookmarkName---------------------------"</span>);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"BookmarkName:{0}:,OwnerDisplayName:{1}"</span>, v.BookmarkName, v.OwnerDisplayName);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                        System.<span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">"================================"</span>);
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                    }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">                }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">
								<span style="color:blue">else</span>
							</span></p><p><span style="font-family:微软雅黑; font-size:9pt">            {
</span></p><p><span style="font-size:9pt"><span style="font-family:微软雅黑">
									<span style="color:#2b91af">MessageBox</span>.Show(<span style="color:#a31515">"</span></span><span style="font-family:宋体">没有创建实例</span><span style="font-family:微软雅黑"><span style="color:#a31515">"</span>);
</span></span></p><p><span style="font-family:微软雅黑; font-size:9pt">            }
</span></p><p><span style="font-family:微软雅黑; font-size:9pt">        }</span></p></td></tr><tr><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p style="text-align: justify"><span style="font-family:宋体; font-size:10pt">结果</span></p></td><td style="padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt"><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1310_WF4012.png" alt=""/></p></td></tr></tbody></table></div><p>
 </p><h3>例:在ForEach中使用Bookmark
</h3><p>将[在ParallelForEach中使用Bookmark]中的ParallelForEach换成ForEach
</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1310_WF4013.png" alt=""/>
	</p><p>
 </p><p>结果
</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1310_WF4014.png" alt=""/>
	</p><p>
 </p><p>
 </p><p>
 </p><img src="http://www.cnblogs.com/foundation/aggbug/1642614.html?type=1" width="1" height="1" alt=""/><p>评论: 1　<a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642614.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642614.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/>· <a href="http://news.cnblogs.com/n/56850/" target="_blank">“谷姐”：披着“谷歌”羊皮的悲哀？</a><span style="color:gray">(2010-02-10 15:32)</span><br/>· <a href="http://news.cnblogs.com/n/56849/" target="_blank">2010，奇虎的本命年</a><span style="color:gray">(2010-02-10 15:26)</span><br/>· <a href="http://news.cnblogs.com/n/56847/" target="_blank">微软赢得Windows XP WGA诉讼</a><span style="color:gray">(2010-02-10 15:23)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>业务流程种类</title><link>http://www.cnblogs.com/foundation/archive/2010/01/08/1642606.html</link><dc:creator>WXWinter(冬)</dc:creator><author>WXWinter(冬)</author><pubDate>Fri, 08 Jan 2010 12:49:00 GMT</pubDate><guid>http://www.cnblogs.com/foundation/archive/2010/01/08/1642606.html</guid><description><![CDATA[<p>阅读: 276 评论: 6 作者: <a href="http://www.cnblogs.com/foundation/" target="_blank">WXWinter(冬)</a> 发表于 2010-01-08 20:49 <a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642606.html" target="_blank">原文链接</a></p><div style="text-align: center"><table style="border-collapse:collapse" border="0"><colgroup><col style="width:695px"/></colgroup><tbody valign="top"><tr style="height: 192px"><td style="padding-left: 7px; padding-right: 7px"><p style="text-align: center">&#160;</p></td></tr><tr style="height: 96px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-bottom:  solid #4f81bd 0.5pt"><p style="text-align: center"><span style="font-size:40pt">企业信息化建设</span></p></td></tr><tr style="height: 48px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none"><p style="text-align: center"><span style="font-size:22pt">业务流程种类</span></p></td></tr><tr style="height: 24px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px">&#160;</td></tr><tr style="height: 24px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px"><p style="text-align: center"><strong>wxwinter</strong></p></td></tr><tr style="height: 24px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px"><p style="text-align: center"><strong>
							</strong>&#160;</p></td></tr></tbody></table></div><p>
&#160;</p><p>
		<table style="border-collapse:collapse" border="0"><colgroup><col style="width:695px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px">&#160;</td></tr></tbody></table><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>摘要
<div style="margin-left: 5pt"><table style="border-collapse:collapse" border="0"><colgroup><col style="width:690px"/></colgroup><tbody valign="top"><tr style="height: 230px"><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">&#160;</td></tr></tbody></table></div><p>
&#160;</p><p>&#160;</p><p>
&#160;</p><p><span style="color:#365f91; font-size:14pt"><strong>目录
</strong></span></p><p><a href="#_Toc250055219"><span style="font-size:10pt"><span style="font-family:宋体">1</span>&#160;&#160;&#160;&#160;<span style="font-family:宋体">业务流程种类&#160;&#160;&#160;&#160;1</span>
					</span></a></p><p style="margin-left: 22pt"><a href="#_Toc250055220"><span style="font-family:宋体; font-size:10pt">1.1&#160;&#160;&#160;&#160;事项流&#160;&#160;&#160;&#160;1</span></a><span style="font-family:宋体; font-size:10pt">
				</span></p><p style="margin-left: 22pt"><a href="#_Toc250055221"><span style="font-family:宋体; font-size:10pt">1.2&#160;&#160;&#160;&#160;财务流&#160;&#160;&#160;&#160;2</span></a><span style="font-family:宋体; font-size:10pt">
				</span></p><p style="margin-left: 22pt"><a href="#_Toc250055222"><span style="font-family:宋体; font-size:10pt">1.3&#160;&#160;&#160;&#160;物品流&#160;&#160;&#160;&#160;3</span></a><span style="font-family:宋体; font-size:10pt">
				</span></p><p style="margin-left: 22pt"><a href="#_Toc250055223"><span style="font-family:宋体; font-size:10pt">1.4&#160;&#160;&#160;&#160;状态流(设备/人员)&#160;&#160;&#160;&#160;4</span></a><span style="font-family:宋体; font-size:10pt">
				</span></p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>&#160;</p><p style="text-align: center"><h1>业务流程种类
</h1></p><h2>事项流
</h2><p style="text-align: center"><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1248_1.png" alt=""/>
			</p><p>
&#160;</p><h2>财务流
</h2><p style="text-align: center"><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1248_2.png" alt=""/>
			</p><p style="text-align: center">
&#160;</p><h2>物品流
</h2><p style="text-align: center"><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1248_3.png" alt=""/>
			</p><h2>状态流(设备/人员)
</h2><p style="text-align: center"><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1248_4.png" alt=""/>
			</p></p></p> <img src="http://www.cnblogs.com/foundation/aggbug/1642606.html?type=1" width="1" height="1" alt=""/><p>评论: 6　<a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642606.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642606.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/>· <a href="http://news.cnblogs.com/n/56850/" target="_blank">“谷姐”：披着“谷歌”羊皮的悲哀？</a><span style="color:gray">(2010-02-10 15:32)</span><br/>· <a href="http://news.cnblogs.com/n/56849/" target="_blank">2010，奇虎的本命年</a><span style="color:gray">(2010-02-10 15:26)</span><br/>· <a href="http://news.cnblogs.com/n/56847/" target="_blank">微软赢得Windows XP WGA诉讼</a><span style="color:gray">(2010-02-10 15:23)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>企业发展需要各方面相互处进</title><link>http://www.cnblogs.com/foundation/archive/2010/01/08/1642604.html</link><dc:creator>WXWinter(冬)</dc:creator><author>WXWinter(冬)</author><pubDate>Fri, 08 Jan 2010 12:47:00 GMT</pubDate><guid>http://www.cnblogs.com/foundation/archive/2010/01/08/1642604.html</guid><description><![CDATA[<p>阅读: 179 评论: 0 作者: <a href="http://www.cnblogs.com/foundation/" target="_blank">WXWinter(冬)</a> 发表于 2010-01-08 20:47 <a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642604.html" target="_blank">原文链接</a></p><div style="text-align: center"><table style="border-collapse:collapse" border="0"><colgroup><col style="width:695px"/></colgroup><tbody valign="top"><tr style="height: 192px"><td style="padding-left: 7px; padding-right: 7px"><p style="text-align: center">&#160;</p></td></tr><tr style="height: 96px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-bottom:  solid #4f81bd 0.5pt"><p style="text-align: center"><span style="font-size:40pt">企业信息化建设</span></p></td></tr><tr style="height: 48px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none"><p style="text-align: center"><span style="font-size:22pt">企业发展需要各方面相互处进</span></p></td></tr><tr style="height: 24px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px">&#160;</td></tr><tr style="height: 24px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px"><p style="text-align: center"><strong>wxwinter</strong></p></td></tr><tr style="height: 24px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px"><p style="text-align: center"><strong>
							</strong>&#160;</p></td></tr></tbody></table></div><p>
&#160;</p><p>
		<table style="border-collapse:collapse" border="0"><colgroup><col style="width:695px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px">&#160;</td></tr></tbody></table><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>摘要
<div style="margin-left: 5pt"><table style="border-collapse:collapse" border="0"><colgroup><col style="width:690px"/></colgroup><tbody valign="top"><tr style="height: 230px"><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">&#160;</td></tr></tbody></table></div><p>
&#160;</p><p>&#160;</p><p>
&#160;</p><p><span style="color:#365f91; font-size:14pt"><strong>目录
</strong></span></p><p><a href="#_Toc249618589"><span style="font-size:10pt"><span style="font-family:宋体">1</span>&#160;&#160;&#160;&#160;<span style="font-family:宋体">A&#160;&#160;&#160;&#160;1</span>
					</span></a></p><p><a href="#_Toc249618590"><span style="font-size:10pt"><span style="font-family:宋体">2</span>&#160;&#160;&#160;&#160;<span style="font-family:宋体">B&#160;&#160;&#160;&#160;2</span></span></a><span style="font-size:10pt">
				</span></p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>&#160;</p><p style="text-align: center"><h1>企业发展螺旋图
</h1></p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1247_1.png" alt=""/>
			</p><p style="text-align: center"><h1>畸形发展
</h1></p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1247_2.png" alt=""/><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1247_3.png" alt=""/>
			</p><p>
&#160;</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1247_4.png" alt=""/>
			</p><p style="text-align: center"><h1>递进式发展
</h1></p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1247_5.png" alt=""/><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1247_6.png" alt=""/><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1247_7.png" alt=""/>
			</p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1247_8.png" alt=""/><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1247_9.png" alt=""/>
			</p><p>
&#160;</p><p style="text-align: center"><h1>跨越式发展
</h1></p><p><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1247_10.png" alt=""/><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1247_11.png" alt=""/>
			</p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p></p></p> <img src="http://www.cnblogs.com/foundation/aggbug/1642604.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642604.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642604.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/>· <a href="http://news.cnblogs.com/n/56850/" target="_blank">“谷姐”：披着“谷歌”羊皮的悲哀？</a><span style="color:gray">(2010-02-10 15:32)</span><br/>· <a href="http://news.cnblogs.com/n/56849/" target="_blank">2010，奇虎的本命年</a><span style="color:gray">(2010-02-10 15:26)</span><br/>· <a href="http://news.cnblogs.com/n/56847/" target="_blank">微软赢得Windows XP WGA诉讼</a><span style="color:gray">(2010-02-10 15:23)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>企业应用平台架构</title><link>http://www.cnblogs.com/foundation/archive/2010/01/08/1642603.html</link><dc:creator>WXWinter(冬)</dc:creator><author>WXWinter(冬)</author><pubDate>Fri, 08 Jan 2010 12:46:00 GMT</pubDate><guid>http://www.cnblogs.com/foundation/archive/2010/01/08/1642603.html</guid><description><![CDATA[<p>阅读: 235 评论: 0 作者: <a href="http://www.cnblogs.com/foundation/" target="_blank">WXWinter(冬)</a> 发表于 2010-01-08 20:46 <a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642603.html" target="_blank">原文链接</a></p><div style="text-align: center"><table style="border-collapse:collapse" border="0"><colgroup><col style="width:695px"/></colgroup><tbody valign="top"><tr style="height: 192px"><td style="padding-left: 7px; padding-right: 7px"><p style="text-align: center"><span style="font-size:36pt">企业信息化建设</span></p></td></tr><tr style="height: 96px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-bottom:  solid #4f81bd 0.5pt"><p style="text-align: center"><span style="font-size:22pt">企业应用平台架构</span></p></td></tr><tr style="height: 48px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px; border-top:  none"><p style="text-align: center"><span style="font-size:22pt">
							</span>&#160;</p></td></tr><tr style="height: 24px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px">&#160;</td></tr><tr style="height: 24px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px"><p style="text-align: center"><strong>wxwinter</strong></p></td></tr><tr style="height: 24px"><td vAlign="middle" style="padding-left: 7px; padding-right: 7px"><p style="text-align: center"><strong>
							</strong>&#160;</p></td></tr></tbody></table></div><p>
&#160;</p><p>
		<table style="border-collapse:collapse" border="0"><colgroup><col style="width:695px"/></colgroup><tbody valign="top"><tr><td style="padding-left: 7px; padding-right: 7px">&#160;</td></tr></tbody></table><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>摘要
<div style="margin-left: 5pt"><table style="border-collapse:collapse" border="0"><colgroup><col style="width:690px"/></colgroup><tbody valign="top"><tr style="height: 230px"><td style="padding-left: 7px; padding-right: 7px; border-top:  solid 0.5pt; border-left:  solid 0.5pt; border-bottom:  solid 0.5pt; border-right:  solid 0.5pt">&#160;</td></tr></tbody></table></div><p>
&#160;</p><p>&#160;</p><p>
&#160;</p><p><span style="color:#365f91; font-size:14pt"><strong>目录
</strong></span></p><p><a href="#_Toc249975763"><span style="font-size:10pt"><span style="font-family:宋体">1</span>&#160;&#160;&#160;&#160;<span style="font-family:宋体">企业管理&#160;&#160;&#160;&#160;1</span>
					</span></a></p><p><a href="#_Toc249975764"><span style="font-size:10pt"><span style="font-family:宋体">2</span>&#160;&#160;&#160;&#160;<span style="font-family:宋体">企业事务&#160;&#160;&#160;&#160;2</span></span></a><span style="font-size:10pt">
				</span></p><p><a href="#_Toc249975765"><span style="font-size:10pt"><span style="font-family:宋体">3</span>&#160;&#160;&#160;&#160;<span style="font-family:宋体">成本质量利润&#160;&#160;&#160;&#160;3</span></span></a><span style="font-size:10pt">
				</span></p><p><a href="#_Toc249975766"><span style="font-size:10pt"><span style="font-family:宋体">4</span>&#160;&#160;&#160;&#160;<span style="font-family:宋体">周期&#160;&#160;&#160;&#160;4</span></span></a><span style="font-size:10pt">
				</span></p><p><a href="#_Toc249975767"><span style="font-size:10pt"><span style="font-family:宋体">5</span>&#160;&#160;&#160;&#160;<span style="font-family:宋体">架构&#160;&#160;&#160;&#160;5</span></span></a><span style="font-size:10pt">
				</span></p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>
&#160;</p><p>&#160;</p><p style="text-align: center"><h1>企业管理
</h1></p><p style="text-align: center"><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1245_1.png" alt=""/>
			</p><p style="text-align: center">
&#160;</p><p>
&#160;</p><p style="text-align: center"><h1>企业事务
</h1></p><p style="text-align: center"><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1245_2.png" alt=""/>
			</p><p style="text-align: center"><h1>成本质量利润
</h1></p><p style="text-align: center"><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1245_3.png" alt=""/>
			</p><p>
&#160;</p><p style="text-align: center"><h1>周期
</h1></p><p>
&#160;</p><p style="text-align: center"><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1245_4.png" alt=""/>
			</p><p>
&#160;</p><p>
&#160;</p><p style="text-align: center"><h1>架构
</h1></p><p style="text-align: center"><img src="http://images.cnblogs.com/cnblogs_com/foundation/010810_1245_5.png" alt=""/>
			</p></p></p> <img src="http://www.cnblogs.com/foundation/aggbug/1642603.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642603.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/foundation/archive/2010/01/08/1642603.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/>· <a href="http://news.cnblogs.com/n/56850/" target="_blank">“谷姐”：披着“谷歌”羊皮的悲哀？</a><span style="color:gray">(2010-02-10 15:32)</span><br/>· <a href="http://news.cnblogs.com/n/56849/" target="_blank">2010，奇虎的本命年</a><span style="color:gray">(2010-02-10 15:26)</span><br/>· <a href="http://news.cnblogs.com/n/56847/" target="_blank">微软赢得Windows XP WGA诉讼</a><span style="color:gray">(2010-02-10 15:23)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item></channel></rss>