WF4.0 基础篇 (十七) Bookmark
来源:互联网 发布:倚天行情软件 编辑:程序博客网 时间:2024/05/12 11:25
本节主要介绍WF4中无返回值Bookmark与有返回值Bookmark,以及Bookmark在parallel,ParallelForEach,ForEach中的使用.
本文例子下载:
http://files.cnblogs.com/foundation/BookmarkSample.rar
本文例子说明
Bookmark
Bookmark可使用流程Idle并触发实例的OnIdle
无返回值Bookmark
要定义具备Bookmark的Activit,可从 NativeActivity继承,override [Execute 方法],使用[NativeActivityContext.CreateBookmark方法]添加Bookmark
需要override [ CanInduceIdle 属性],使其返回值为[True]
可用[实例.ResumeBookmark方法]触发Bookmark
publicsealed class noResultBookmark : NativeActivity
{
publicInArgument<string> bookmarkName {get; set; }
protectedoverride bool CanInduceIdle
{
get
{ return true; }
}
protectedoverride void Execute(NativeActivityContext context)
{
string bookmark = context.GetValue(bookmarkName);
context.CreateBookmark(bookmark);
System.Console.WriteLine("创建bookmark:{0}", bookmark);
}
}
例:基本使用
流程
宿主
//===================================================
void workflowCompleted(WorkflowApplicationCompletedEventArgs e)
{
instance = null;
System.Console.WriteLine("workflowCompleted:{0}", e.CompletionState.ToString());
}
void aborted(WorkflowApplicationAbortedEventArgs e)
{
instance = null;
System.Console.WriteLine("aborted ,Reason:{0}", e.Reason.Message);
}
UnhandledExceptionAction unhandledExceptionl(WorkflowApplicationUnhandledExceptionEventArgs e)
{
System.Console.WriteLine("unhandledException:{0}", e.UnhandledException.Message);
returnUnhandledExceptionAction.Cancel;
}
void workflowIdel(WorkflowApplicationIdleEventArgs e)
{
System.Console.WriteLine("Idle:{0}", e.InstanceId);
System.Console.WriteLine("--------BookmarkName---------------------------");
foreach (var itemin e.Bookmarks)
{
System.Console.WriteLine("{0}", item.BookmarkName);
}
System.Console.WriteLine("================================");
}
//==================================================
WorkflowApplication instance =null;
privatevoid button_Run_Click(object sender,RoutedEventArgs e)
{
instance = new WorkflowApplication(new WFLibrary.noResultBookmarkWorkflow());
instance.Completed =new Action<WorkflowApplicationCompletedEventArgs>(workflowCompleted);
instance.OnUnhandledException = unhandledExceptionl;
instance.Aborted = aborted;
instance.Idle = workflowIdel;
instance.Run();
}
privatevoid button_triggering_Click(object sender,RoutedEventArgs e)
{
string bookName = textBoxBookmark.Text;
if (instance !=null)
{
if (instance.GetBookmarks().Count(p => p.BookmarkName == bookName) ==1)
{
instance.ResumeBookmark(bookName,null);
}
else
{
foreach (var vin instance.GetBookmarks())
{
System.Console.WriteLine("--------请从下面选项中选择一BookmarkName---------------------------");
System.Console.WriteLine("BookmarkName:{0}:,OwnerDisplayName:{1}", v.BookmarkName, v.OwnerDisplayName);
System.Console.WriteLine("================================");
}
}
}
else
{
MessageBox.Show("没有创ä建实例");
}
}
结果
有返回值Bookmark
要定义具备Bookmark的Activit,可从 NativeActivity<T> 继承,override [Execute 方法],使用[NativeActivityContext.CreateBookmark方法]添加Bookmark
需要override [ CanInduceIdle 属性],使其返回值为[True]
可用[实例.ResumeBookmark方法]触发Bookmark
publicsealed class resultBookmark<T> : NativeActivity<T>
{
publicInArgument<string> bookmarkName {get; set; }
protectedoverride bool CanInduceIdle
{
get
{ return true; }
}
protectedoverride void Execute(NativeActivityContext context)
{
string bookmark = context.GetValue(bookmarkName);
context.CreateBookmark(bookmark,newBookmarkCallback(bookmarkCallback));
System.Console.WriteLine("创建bookmark:{0}", bookmark);
}
void bookmarkCallback(NativeActivityContext context,Bookmark bookmark, object obj)
{
this.Result.Set(context, (T)obj);
}
}
例:基本使用
流程
宿主
//===================================================
void workflowCompleted(WorkflowApplicationCompletedEventArgs e)
{
instance = null;
System.Console.WriteLine("workflowCompleted:{0}", e.CompletionState.ToString());
}
void aborted(WorkflowApplicationAbortedEventArgs e)
{
instance = null;
System.Console.WriteLine("aborted ,Reason:{0}", e.Reason.Message);
}
UnhandledExceptionAction unhandledExceptionl(WorkflowApplicationUnhandledExceptionEventArgs e)
{
System.Console.WriteLine("unhandledException:{0}", e.UnhandledException.Message);
returnUnhandledExceptionAction.Cancel;
}
void workflowIdel(WorkflowApplicationIdleEventArgs e)
{
System.Console.WriteLine("Idle:{0}", e.InstanceId);
System.Console.WriteLine("--------BookmarkName---------------------------");
foreach (var itemin e.Bookmarks)
{
System.Console.WriteLine("{0}", item.BookmarkName);
}
System.Console.WriteLine("================================");
}
//==================================================
WorkflowApplication instance =null;
privatevoid button_Run_Click(object sender,RoutedEventArgs e)
{
instance = new WorkflowApplication(new WFLibrary.resultBookmarkWorkflow());
instance.Completed =new Action<WorkflowApplicationCompletedEventArgs>(workflowCompleted);
instance.OnUnhandledException = unhandledExceptionl;
instance.Aborted = aborted;
instance.Idle = workflowIdel;
instance.Run();
}
privatevoid button_triggering_Click(object sender,RoutedEventArgs e)
{
string bookName = textBoxBookmark.Text;
string inputValue = textBox_Value.Text;
if (instance !=null)
{
if (instance.GetBookmarks().Count(p => p.BookmarkName == bookName) ==1)
{
instance.ResumeBookmark(bookName,inputValue );
}
else
{
foreach (var vin instance.GetBookmarks())
{
System.Console.WriteLine("--------请从下面选项中选择一BookmarkName---------------------------");
System.Console.WriteLine("BookmarkName:{0}:,OwnerDisplayName:{1}", v.BookmarkName, v.OwnerDisplayName);
System.Console.WriteLine("================================");
}
}
}
else
{
MessageBox.Show("没有创建实例");
}
}
结果
例:在parallel中使用Bookmark
流程
宿主
//===================================================
void workflowCompleted(WorkflowApplicationCompletedEventArgs e)
{
instance = null;
System.Console.WriteLine("workflowCompleted:{0}", e.CompletionState.ToString());
}
void aborted(WorkflowApplicationAbortedEventArgs e)
{
instance = null;
System.Console.WriteLine("aborted ,Reason:{0}", e.Reason.Message);
}
UnhandledExceptionAction unhandledExceptionl(WorkflowApplicationUnhandledExceptionEventArgs e)
{
System.Console.WriteLine("unhandledException:{0}", e.UnhandledException.Message);
returnUnhandledExceptionAction.Cancel;
}
void workflowIdel(WorkflowApplicationIdleEventArgs e)
{
System.Console.WriteLine("Idle:{0}", e.InstanceId);
System.Console.WriteLine("--------BookmarkName---------------------------");
foreach (var itemin e.Bookmarks)
{
System.Console.WriteLine("{0}", item.BookmarkName);
}
System.Console.WriteLine("================================");
}
//==================================================
WorkflowApplication instance =null;
privatevoid button_Run_Click(object sender,RoutedEventArgs e)
{
instance = new WorkflowApplication(new WFLibrary.parallelBookmarkWorkflow());
instance.Completed =new Action<WorkflowApplicationCompletedEventArgs>(workflowCompleted);
instance.OnUnhandledException = unhandledExceptionl;
instance.Aborted = aborted;
instance.Idle = workflowIdel;
instance.Run();
}
privatevoid button_triggering_Click(object sender,RoutedEventArgs e)
{
string bookName = textBoxBookmark.Text;
string inputValue = textBox_Value.Text;
if (instance !=null)
{
if (instance.GetBookmarks().Count(p => p.BookmarkName == bookName) ==1)
{
instance.ResumeBookmark(bookName,inputValue );
}
else
{
foreach (var vin instance.GetBookmarks())
{
System.Console.WriteLine("--------请从下面选项中选择一BookmarkName---------------------------");
System.Console.WriteLine("BookmarkName:{0}:,OwnerDisplayName:{1}", v.BookmarkName, v.OwnerDisplayName);
System.Console.WriteLine("================================");
}
}
}
else
{
MessageBox.Show("没有创建实例");
}
}
结果
例:在ParallelForEach中使用Bookmark
流程
参数
变量
流程
宿主
//===================================================
void workflowCompleted(WorkflowApplicationCompletedEventArgs e)
{
instance = null;
System.Console.WriteLine("workflowCompleted:{0}", e.CompletionState.ToString());
}
void aborted(WorkflowApplicationAbortedEventArgs e)
{
instance = null;
System.Console.WriteLine("aborted ,Reason:{0}", e.Reason.Message);
}
UnhandledExceptionAction unhandledExceptionl(WorkflowApplicationUnhandledExceptionEventArgs e)
{
System.Console.WriteLine("unhandledException:{0}", e.UnhandledException.Message);
returnUnhandledExceptionAction.Cancel;
}
void workflowIdel(WorkflowApplicationIdleEventArgs e)
{
System.Console.WriteLine("Idle:{0}", e.InstanceId);
System.Console.WriteLine("--------BookmarkName---------------------------");
foreach (var itemin e.Bookmarks)
{
System.Console.WriteLine("{0}", item.BookmarkName);
}
System.Console.WriteLine("================================");
}
//==================================================
WorkflowApplication instance =null;
privatevoid button_Run_Click(object sender,RoutedEventArgs e)
{
System.Collections.Generic.SortedSet<string> nameList =new SortedSet<string>();
nameList.Add("wxd");
nameList.Add("wxwinter");
nameList.Add("lzm");
nameList.Add("dd");
System.Collections.Generic.Dictionary<string,object> dictionary = newDictionary<string,object>();
dictionary.Add("myNameList", nameList);
instance = new WorkflowApplication(new WFLibrary.ParallelForEachWorkflow(), dictionary);
instance.Completed =new Action<WorkflowApplicationCompletedEventArgs>(workflowCompleted);
instance.OnUnhandledException = unhandledExceptionl;
instance.Aborted = aborted;
instance.Idle = workflowIdel;
instance.Run();
}
privatevoid button_triggering_Click(object sender,RoutedEventArgs e)
{
string bookName = textBoxBookmark.Text;
string inputValue = textBox_Value.Text;
if (instance !=null)
{
if (instance.GetBookmarks().Count(p => p.BookmarkName == bookName) ==1)
{
instance.ResumeBookmark(bookName,inputValue );
}
else
{
foreach (var vin instance.GetBookmarks())
{
System.Console.WriteLine("--------请从下面选项中选择一BookmarkName---------------------------");
System.Console.WriteLine("BookmarkName:{0}:,OwnerDisplayName:{1}", v.BookmarkName, v.OwnerDisplayName);
System.Console.WriteLine("================================");
}
}
}
else
{
MessageBox.Show("没有创建实例");
}
}
结果
例:在ForEach中使用Bookmark
将[在ParallelForEach中使用Bookmark]中的ParallelForEach换成ForEach
结果
- WF4.0 基础篇 (十七) Bookmark
- WF4.0和BookMark
- WF4.0 基础篇 (二十七) WCF Workflow Service 在WCF中使用WF
- WF4.0 基础篇 (十四) Delay 与WF4中的线程
- WF4.0 Beta1之旅(4):Bookmark的使用
- WF4.0 基础篇 (十六) CompensableActivity 补偿
- WF4.0 基础篇 (十八) Flowchart
- WF4.0 基础篇 (二十一) WorkflowInvoker
- WF4.0 基础篇 (二十二) Tracking
- WF4.0 基础篇 (二十九) WorkflowInspectionServices
- WF4.0 基础篇 (一)开始使用WF
- WF4.0 基础篇 (四) 顺序容器Sequence 与CodeActivity
- WF4.0 基础篇 (五) 数据的传递 Variable变量
- WF4.0 基础篇 (六) 数据的传递 Arguments 参数
- WF4.0 基础篇 (八) 控制流Activity
- WF4.0 基础篇 (一)开始使用WF
- WF4.0 基础篇 (四) 顺序容器Sequence 与CodeActivity
- WF4.0 基础篇 (五) 数据的传递 Variable变量
- Android之Service与IntentService的比较
- 日日日日日日日
- c++ 虚函数的实现机制:笔记
- 【文件】EXE自我复制、自我删除分析
- JSTL的fn函数
- WF4.0 基础篇 (十七) Bookmark
- Windows系统使用minGW+msys 编译ffmpeg 0.5的全过程详述
- new个二维数组
- mybatis整合redis
- WF4.0 基础篇 (十八) Flowchart
- ping工作原理
- WF4.0 基础篇 (十九) Persistence 持久化
- 有关import sun.audio.AudioPlayer(或者其它文件)的问题
- 提示microsoft incremental linker已停止工作解决方法