Windows Workflow:从WorkflowApplication获取变量

时间:2017-10-11 07:09:25

标签: c# .net workflow-foundation-4

我正在使用Windows Workflow Foundation(WWF)。我用一个Sequence创建了一个Activity(XAML),在其中我定义了一个变量。

我通过创建WorkflowApplication实例在控制台应用程序中运行活动。如何在控制台应用程序中获取变量的值?

我在XML中坚持使用WorkflowApplication的实例,在其中我看到了我的变量及其值。有没有正确的方法从XML获取变量的值?

1 个答案:

答案 0 :(得分:1)

因此,在上一条评论中,您声明要在工作流程完成之前获取控制台应用程序中的状态。不幸的是,In / Out和Out参数仅在完成工作流程后才可用。但是有一些方法可以使用除工作流变量和参数之外的其他构造与主机进程通信。

其中一种方法是使用可用于与主机进程交互的自定义​​扩展。扩展可以是任何类型,可用于工作流和主机进程。一个完整的例子:

using System;
using System.Activities;

namespace WorkflowDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var app = new WorkflowApplication(new MyCustomActivity());
            var myExtension = new MyCommunicationExtension();
            myExtension.MyValueChanged += (s, e) => Console.WriteLine(myExtension.MyValue);

            app.Extensions.Add(myExtension);
            app.Run();

            Console.ReadKey();
        }
    }

    public class MyCommunicationExtension
    {
        public string MyValue { get; private set; }

        public event EventHandler<EventArgs> MyValueChanged;

        public void OnMyValueChanged(string value)
        {
            MyValue = value;
            MyValueChanged?.Invoke(this, EventArgs.Empty);
        }
    }

    public class MyCustomActivity : CodeActivity
    {
        protected override void Execute(CodeActivityContext context)
        {
            var extensionObj = context.GetExtension<MyCommunicationExtension>();
            if (extensionObj != null)
            {
                extensionObj.OnMyValueChanged("Hello World");
            }
        }
    }
}