WF4中的SynchronizationContext和Bookmarks

时间:2010-05-22 12:22:32

标签: workflow-foundation-4

我在asp.net下运行工作流程并使用SynchronizationContext使页面“等待”工作流程。以下是我在asp.net下运行工作流实例的方法:

var workflowApplication = new WorkflowApplication(activity);
SynchronizationContext syncContext = SynchronizationContext.Current;
workflowApplication.Completed = delegate { syncContext.OperationCompleted(); };
workflowApplication.SynchronizationContext = syncContext;
syncContext.OperationStarted();
workflowApplication.Run();

在其中一项活动中,我使用书签。现在,每当我调用CreateBookmark时,我都希望页面处理继续。我尝试在设置书签之前调用SynchronizationContext.Current.OperationCompleted(),但是当工作流程恢复并完成时,它会破坏asp.net站点(我认为工作流实例在完成时再次调用OperationCompleted并且错误提升)

如何使用Asp.Net下的书签,任何想法?

1 个答案:

答案 0 :(得分:0)

当您使用书签持久保存工作流程时,未调用已完成的属性,请在设置完成的属性后尝试添加此行:

workflowApplication.PersistableIdle = args => {
  syncContext.OperationCompleted();
  return PersistableIdleAction.None;
};

然后应该调用它而不是完成,ASP.NET代码应该重新获得控制权。将PersistableIdleAction枚举更改为所需的任何内容,我刚刚选择了None作为示例代码。