当自定义活动触发事件时,WF 4.0与主机通信

时间:2011-03-02 22:53:04

标签: workflow-foundation-4

我构建了一个编辑某些文件的WF 4.0应用程序,然后复制到另一个目录。有些文件很大 - 在1-4个演出的范围内。所以我想将复制进度反馈给用户。

我使用Microsoft Sync框架来复制文件,它有一个触发事件,其中包含为文件复制的百分比。

除了提供服务之外,我找不到直接的方式将此信息传达给主人 - 这看起来有点过分。

我是WF4.0的新手,所以我可能已经看了一些非常明显的东西,但经过大量的搜索后我找不到直接的解决方案。

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

你应该看看Workflow Instance Extensions。您创建了一个实现IWorkflowInstanceExtension接口的类,并添加了一个发送进度通知的方法:

class MyExtension : IWorkflowInstanceExtension
{
    IEnumerable<Object> GetAdditionalExtensions()
    {
        return null;
    }

    void SetInstance(WorkflowInstanceProxy instance)
    { }

    public void SetProgress(int progress)
    {
        // implementation of your method can communicate with the user
    }
}

在运行工作流程之前,您需要将扩展​​程序添加到主机,例如WorkflowApplication

myWorkflowApplication.Extensions.Add(myExtension);

在活动中,您可以访问此扩展程序并调用其方法将进度信息发送出工作流程:

context.GetExtension<MyExtension>().SetProgress(progress);