[WF4]Activity Delegate and Invoke

与CLR/BCL/C#里的概念进行联想对比,不难理解。

using System;
using System.Activities;
using System.Activities.Expressions;
using System.Activities.Statements;

namespace ActivityDelegateAndInvoke
{
    public sealed class GetAndPlay<T> : Activity
    {
        public ActivityFunc<T> Get { get; set; }
        public ActivityAction<T> Play { get; set; }
        public GetAndPlay()
        {
            this.Implementation = () =>
                {
                    Variable<T> data = new Variable<T>();
                    var seq = new Sequence
                    {
                        Variables = { data },
                        Activities =
                        {
                            new InvokeFunc<T>
                            {
                                Func = Get,
                                Result = data
                            },
                            new InvokeAction<T>
                            {
                                Action = Play,
                                Argument = data
                            }
                        }
                    };
                    return seq;
                };
        }
        protected override void CacheMetadata(ActivityMetadata metadata)
        {
            base.CacheMetadata(metadata);
            if (Get == null)
                metadata.AddValidationError("Get is null");
            if (Play == null)
                metadata.AddValidationError("Play is null");
        }
    }
    public sealed class GetDateTime : CodeActivity<string>
    {
        protected override string Execute(CodeActivityContext context)
        {
            return DateTime.Now.ToString();
        }
    }
    public sealed class Show : CodeActivity
    {
        [RequiredArgument]
        public InArgument<string> Text { get; set; }
        protected override void Execute(CodeActivityContext context)
        {
            Console.WriteLine(this.Text.Get(context));
        }
    }
    public static class Test
    {
        public static void Run()
        {
            var dateOut = new DelegateOutArgument<string>();
            var getDateTime = new ActivityFunc<string>
            {
                Result = dateOut,
                Handler = new GetDateTime
                {
                    Result = dateOut
                }
            };
            var dateIn = new DelegateInArgument<string>();
            var show = new ActivityAction<string>
            {
                Argument = dateIn,
                Handler = new Show
                {
                    Text = dateIn
                }
            };
            var showDatetime = new GetAndPlay<string>
            {
                Get = getDateTime,
                Play = show
            };
            WorkflowInvoker.Invoke(showDatetime);
        }
    }
}

转载于:https://www.cnblogs.com/zzfff/archive/2011/04/18/2020094.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值