正确完成WF 4和MVC3中工作流的执行

时间:2012-07-18 20:00:05

标签: c# multithreading asp.net-mvc-3 workflow-foundation-4

我有一个运行的工作流程(由WorkflowApplication托管),发送电子邮件,然后继续使用书签。该电子邮件有一个链接,允许工作流程在该书签中恢复,并正确执行。但是,在工作流程完成后,网页永远不会加载。

就像页面正在等待工作流程完成但它永远不会。我是工作流程的新手,甚至是多线程的新手,所以我的问题是:

我需要做些什么特别的工作才能完全退出工作流程,以便将控制权交还给主线程?像委托方法我错过了?

干杯

1 个答案:

答案 0 :(得分:0)

所以我发布后就知道了,所以我很抱歉。不过这是:

因为Workflow是在一个单独的线程上,所以一旦完成它就不会与主线程同步。所以我需要在Completed委托中添加一个方法,以确保它在完成后与主线程同步。我忘记了。希望这有助于某人。

首先,您需要设置并自动重置事件和WorkflowApplication对象

 private static AutoResetEvent _syncEvent = new AutoResetEvent(false);
 private static WorkflowApplcation _wfApp = new WorkflowApplication(new MyActivity());

然后在wfApp的委托方法中,请务必调用:

 _syncEvent.Set();

所以:

wfApp.Completed = (e) =>
              {
                Debug.WriteLine("Workflow completed: {0}", e.Outputs["Message"]);
                _syncEvent.Set();
              };

最后一部分是我缺少的