开始学习WF4.0 Bate2了,今天开始学基础活动 Pick
摘要:本文主要介绍如何使用Pick
首先创建新的WorkflowConsoleApplication.
1添加类ReadString,实现代码如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
public class ReadString:NativeActivity<string>
{
[RequiredArgument]
public InArgument<string> BookmarkName { get; set; }
//这个值是用来标记此活动是否可以由工作流引起挂起,默认是false,表示不可以
protected override bool CanInduceIdle
{
get
{
return true;
}
}
//在Execute中创建Bookmark,挂起流程
protected override void Execute(NativeActivityContext context)
{
context.CreateBookmark(this.BookmarkName.Get(context), new BookmarkCallback(OnReadComplete));
}
void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state)
{
string input = state as string;
context.SetValue(this.Result,input);
}
}
2创建流程:
![](https://images.cnblogs.com/cnblogs_com/echo_saq/Pick流程图.GIF)
创建variable名称为“name”;Delay 中延迟5秒;ReadString中bookmarkname设定为“echo”;
3调用:Program内容如下
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
static string bookmarkName = "echo";//对应于前面流程中的ReadString活动上的bookmarkname
static void Main(string[] args)
{
ManualResetEvent completedEvent = new ManualResetEvent(false);
AutoResetEvent idleEvent = new AutoResetEvent(false);
WorkflowApplication application = new WorkflowApplication(new PickActivity());
application.Idle += delegate(WorkflowApplicationIdleEventArgs e)
{
idleEvent.Set();
};
application.Completed += delegate(WorkflowApplicationCompletedEventArgs e)
{
completedEvent.Set();
};
application.Run();
idleEvent.WaitOne();
Console.WriteLine("What is you name? (You have 5 seconds to answer)");
string text = Console.ReadLine();
// 得到用户输入,恢复自定义活动中的书签,是流程继续运转.
application.ResumeBookmark(bookmarkName, text);
completedEvent.WaitOne();
Console.WriteLine("The workflow has completed");
Console.WriteLine("Press <return> to exit
");
Console.ReadLine();
}
至此,结束。
第一次发帖,
清多多包涵,多提意见!!