【问题标题】:Windows Workflow: Getting variable from WorkflowApplicationWindows 工作流:从 WorkflowApplication 获取变量
【发布时间】:2017-10-11 07:09:24
【问题描述】:

我使用的是 Windows Workflow Foundation (WWF)。我用一个序列创建了一个活动 (XAML),我在其中定义了一个变量。

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

我在 XML 中保存了一个 WorkflowApplication 实例,在其中我看到了我的变量及其值。有没有正确的方法从 XML 中获取变量的值?

【问题讨论】:

  • 变量的范围是一个活动。您需要使用参数来获取控制台应用程序中的值。
  • WorkflowApplication 实例有一个包含 InArgument 的 WorkflowDefinition 属性。要通过 InArgument 获取值,我必须调用 context.GetValue()。如何从使用 WorkflowApplication 的控制台应用程序获取上下文?
  • 你不需要,看我的回答

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


【解决方案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");
            }
        }
    }
}

【讨论】:

  • 如果不使用书签,您的方法将起作用。我需要在控制台应用程序完成之前从内部找出 Activity 状态。
  • @Porfus 查看我修改后的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多