WF4.0和BookMark

       WF4.0中加入了书签(Bookmark)机制,可以让活动在书签的位置挂起(Idel),是线程挂起,等待恢复。如果我们需要在活动没有完成的时候,提供额外的数据,这个时候我们就可以给活动注册一个书签,我们需要使用CreateNamedBookmark方法创建书签,该方法有三个参数一个名字,一BookmarkCallback的委托,当活动恢复的时候执行。和BookmarkOptions,Runtime为每个工作流实例维护一个Bookmarks的Table,每次有Bookmark要恢复的时候都回去check。

流程代码:

<span style="font-size:18px;">namespace workflow
{

    public sealed class TestActivity :NativeActivity 
    {

        #region 设置是否可以被持久化:bool CanInduceIdle { get { return true; } }
        /// <summary>
        /// 设置是否可以被持久化
        /// </summary>
        protected override bool CanInduceIdle { get { return true; } }
        #endregion
        // 派生并从 Execute 方法返回该值。
        protected override void Execute(NativeActivityContext context)
        {
            //活动“workflow.TestActivity”无效。对于 NativeActivity 派生的活动,若其调用 System.Activities.NativeActivityContext 中定义的某个 CreateBookmark 重载,以便执行异步操作,则必须覆盖 CanInduceIdle 属性且返回 true。
            Console.WriteLine("创建书签,终止工作流");
            //创建书签
            context.CreateBookmark("bookmark", new BookmarkCallback(this.Continue));
            Console.WriteLine("恢复书签,流程继续");

        }
        void Continue(NativeActivityContext context, Bookmark bookmark, object obj)
        {
            //根据自己的需求,传一些值
        }
    }
}</span>
注意,这个函数是在BookMark创建时候的一个委托,表示在恢复Bookmark后调用的方法

新建一个windows窗体


<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">namespace from
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private string processInstanceID;
        private WorkflowApplication application;
        //启动流程并创建书签
        private void button1_Click(object sender, EventArgs e)
        {
            
            TestActivity activity = new TestActivity();



            application = new WorkflowApplication(activity);
            processInstanceID = application.Id.ToString();
            application.Run();
           
        }
        /// <summary>
        /// 恢复书签
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            TestActivity activity = new TestActivity();

            BookmarkResumptionResult BRR = application.ResumeBookmark(application.GetBookmarks()[0].BookmarkName, "inPut");
            MessageBox.Show("Bookmark恢复执行:" + BRR.ToString());
        }
    }
}</span></span></span>

依次执行按钮结果为:




      这几篇总结的工作流知识点比较散,下来会通过一个实例来连接起来。敬请期待。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值