WorkFlow Foundation 4 WorkflowApplication Завершенные выходы пустые - PullRequest
2 голосов
/ 05 мая 2011

Я только начал оборачиваться вокруг WF4;и я изо всех сил пытаюсь понять, почему мои выходные данные остаются пустыми в моем рабочем процессе.

Во-первых, у меня есть .xaml, который содержит объект Sequence (или Activity?);который, в свою очередь, содержит «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.

Любая помощь будет принята.

Matt

1 Ответ

1 голос
/ 05 мая 2011

Словарь Outputs в обратном вызове Completed содержит OutArguments из рабочего процесса, а не действия, которые выполняются как часть рабочего процесса. Если вы хотите увидеть результат своей деятельности, вам нужно создать уровень OutArgument рабочего процесса и привязать FirstCodeHasExecuted к нему с помощью выражения VB.

...