C#以编程方式从代码活动WF 4.0内部终止工作流

Has*_*dad 3 .net c# .net-4.0 workflow-foundation workflow-foundation-4

我在Windows Workflow Foundation Service中托管了一个代码Activity,我希望根据我从数据库中检查的一些值来终止工作流.我不想使用Throw Exception方法,我需要从"Code Activity"代码中进行,而不是从设计器中进行.我仍然是WWF的初学者,我尝试了以下方法,即创建工作流应用程序,并在代码活动的当前实例上初始化它,但它不起作用.我需要首先捕获当前活动实例的父工作流应用程序,然后调用Terminate方法.

   WorkflowApplication wfApp = new WorkflowApplication(this);
   wfApp.Terminate("The following workflow is terminating");
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助

Joa*_*oao 5

要正常终止,只需使用TerminateWorkflow作为子活动.这将调用WorkflowApplication.Completed操作.

public class CanceledActivity : NativeActivity
{
    private readonly TerminateWorkflow terminateWorkflow = new TerminateWorkflow
        {
            Reason = "Reason why I'm terminating!"
        };

    protected override void CacheMetadata(NativeActivityMetadata metadata)
    {
        metadata.AddImplementationChild(terminateWorkflow);
    }

    protected override void Execute(NativeActivityContext context)
    {
        context.ScheduleActivity(terminateWorkflow);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者您可以抛出异常,但这将调用WorkflowApplication.OnUnhandledException.

public class CanceledActivity : NativeActivity
{
    protected override void Execute(NativeActivityContext context)
    {
        throw new Exception("this will not gracefully terminate the workflow")
    }
}
Run Code Online (Sandbox Code Playgroud)

还有很多其他的方法,这取决于你想做什么以及什么时候你想做.请记住,由于其异步性,工作流只会在可能的情况下终止.