码迷,mamicode.com
首页 > 其他好文 > 详细

有返回值的Bookmark

时间:2018-05-21 14:35:16      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:nat   sea   创建   exec   set   ons   protect   end   cti   

首先代码创建Activity:

 public sealed class WaitForResponse<TResult>:NativeActivity<TResult>
    {
        public WaitForResponse()
            :base()
        {}

        public string ResponseName { get; set; }

        protected override bool CanInduceIdle => true;

        protected override void Execute(NativeActivityContext context)
        {
            context.CreateBookmark(this.ResponseName, new BookmarkCallback(this.ReceivedResponse)); //这里加入BookmarkCallback, 用来设置返回值
        }

        void ReceivedResponse(NativeActivityContext context,Bookmark bookmark,object obj)
        {
            this.Result.Set(context, (TResult)obj);
        }
    }

 

创建Workflow:

技术分享图片

 

在Branch1中创建一个变量myVar, 然后在创建的Activity中设置Result为myVar, 这个myVar会接收这个Activity创建Bookmark时返回的值. 

测试:

public partial class Form1 : Form
    {
        static WorkflowApplication wfapp;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            wfapp = new WorkflowApplication(new ActivityLibrary1.Activity1());
            wfapp.Idle = MyIdle;
            wfapp.Run();

            ThreadPool.QueueUserWorkItem(ReadName); //传入的关键, 不然workflow不会resume, Pick会运行到Branch2中去
        }

        void MyIdle(WorkflowApplicationIdleEventArgs e)
        {
            Console.WriteLine("Idle:" + e.InstanceId);
        }

        static void ReadName(object state)
        {
            string text = "abc";

            // Resume the Activity that set this bookmark (ReadString).
           Form1.wfapp.ResumeBookmark("P1", text);         
           
        }
    }

 

有返回值的Bookmark

标签:nat   sea   创建   exec   set   ons   protect   end   cti   

原文地址:https://www.cnblogs.com/hzb2001/p/9066667.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!