【问题标题】:WorkFlow Foundation 4 WorkflowApplication Completed Outputs Are BlankWorkFlow Foundation 4 WorkflowApplication 完成的输出为空白
【发布时间】:2011-05-05 16:19:19
【问题描述】:

我刚刚开始关注 WF4;我很难理解为什么我的输出在我的工作流程中是空白的。

首先,我有一个包含 Sequence 对象(或 Activity?)的 .xaml;其中又包含一个“FirstCodeActivity”,其中包含以下代码:

public class FirstCodeActivity : NativeActivity
{
  public OutArgument<string> FirstCodeHasExecuted { get; set; }

  protected override void Execute(NativeActivityContext context)
  {
    context.CreateBookmark("FirstBookmark", OnResumeBookmark);
  }

  protected override bool CanInduceIdle
  {
    get { return true; }
  }

  public void OnResumeBookmark(NativeActivityContext context, Bookmark bookmark, object obj)
  {
    FirstCodeHasExecuted.Set(context, "Yes");
  }
}

据我了解,当设置书签时,它应该在 FirstCodeHasExecuted 属性中返回值“Yes”。

调试的时候可以确认书签事件触发成功了。

这是我的 WF4 初始化代码:

var idleEvent = new AutoResetEvent(false);

var workflowApplication = new WorkflowApplication(new MyWorkFlow())
{
  Idle = delegate { idleEvent.Set(); },

  Completed = delegate(WorkflowApplicationCompletedEventArgs e)
  {
    Outputs = e.Outputs;
  }
};

workflowApplication.Run();

idleEvent.WaitOne();

workflowApplication.ResumeBookmark("FirstBookmark", "Resume me!");

idleEvent.WaitOne();

我的问题是我可以理解为什么 e.Outputs 在其字典中不返回任何项目,即使我在 FirstCodeActivity 中设置了该属性。

我做错了吗?我的第一个想法是序列作为不同的上下文运行,因此不包含 FirstCodeActivity 的输出。

任何帮助将不胜感激。

马特

【问题讨论】:

    标签: c# arguments workflow-foundation-4 bookmarks


    【解决方案1】:

    已完成回调中的输出字典包含来自工作流的 OutArguments,而不是作为工作流的一部分执行的活动。如果您想在那里查看活动的结果,您需要创建一个工作流级别 OutArgument 并使用 VB 表达式将 FirstCodeHasExecuted 绑定到该级别。

    【讨论】:

    • 感谢您的回答!这是有道理的,虽然我还不是 100% 熟悉如何做到这一点,并且说我不知道​​ VB 是轻描淡写的!让我确认一下,我会接受你的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多