WorkFlow Foundation 4 WorkflowApplication完成的输出是空白的

时间:2011-05-05 16:19:19

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

我刚开始绕着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属性中返回值“是”。

调试时,我可以确认已成功触发书签事件。

这是我的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的输出。

任何帮助都将不胜感激。

马特

1 个答案:

答案 0 :(得分:1)

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