首页 > 其他 > 详细

有返回值的Bookmark

时间:2018-05-21 13:24:18      阅读:220      评论:0      收藏:0      [点我收藏+]

首先代码创建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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!