WF4 - как правильно вызвать NativeActivityContext.ScheduleDelegate? - PullRequest
0 голосов
/ 24 апреля 2011
public class NativeActivity1 : NativeActivity
{
    public NativeActivity1()
    {
        var myDynamicActivity = ActivityXamlServices.Load(@"C:\WorkflowConsoleApplication1\WorkflowConsoleApplication1\Workflow1.xaml") as DynamicActivity;
        var argInt32 = new InOutArgument<int>();

        this.ChildActivity = new DynamicActivity
        {
            Properties = { new DynamicActivityProperty() { Name="argInt32", Type=typeof(InOutArgument<int>), Value=argInt32 }, },
            Implementation = () => new Sequence
            {
                Activities =
                {
                    myDynamicActivity,
                    new WriteLine { Text = new InArgument<string>(ctx => argInt32.Get(ctx).ToString()) }
                }
            }
        };
    }
    public DynamicActivity ChildActivity { get; set; }
    protected override void Execute(NativeActivityContext context)
    {
        var parameter = 10;
        while (0 < parameter--)
        {
            var activityInstance = context.ScheduleDelegate(
                new ActivityAction { Handler = this.ChildActivity }
                , new Dictionary<string, object> { { "argInt32", parameter } }
                , (activityContext, completedInstance, outArguments) =>
                {
                    Console.WriteLine("Output:" + outArguments["argInt32"].ToString());
                }, (faultContext, propagatedException, propagatedFrom) =>
                {
                    Console.WriteLine("Fault");
                });
        }
    }
}

    class Program
    {
        static void Main(string[] args)
        {
            WorkflowInvoker.Invoke(new NativeActivity1());
            Console.WriteLine("Press any key to end the process ...");
            Console.ReadLine();
        }
    }

У меня есть цикл while, который делает итерацию от 1 до 10. Каждое добавочное число передается в рабочий процесс, и рабочий процесс предполагает возвращение отрицательного значения путем умножения на -1. Так как мне нужно оставаться в методе Execute и выполнять итерации, я подумал, что единственный способ вызвать рабочий процесс с параметрами - это использовать NativeActivityContext.ScheduleDelegate. Единственное ограничение в программе - не использовать WorkflowInvoker.Invoke. кто-нибудь знает, как использовать ScheduleDelegate?

Спасибо, Мойз

1 Ответ

1 голос
/ 29 апреля 2011

Я написал пример, который может вам помочь. См. WF4 Как вызвать дочерний рабочий процесс как XAML

...