gpt4 book ai didi

workflow-foundation - Workflow 4.0 自定义事件启动外部流程

转载 作者:行者123 更新时间:2023-12-04 08:17:41 26 4
gpt4 key购买 nike

我正在试用 Workflow 4.0,希望编写自定义事件来启动外部可执行文件,等待该过程完成,然后恢复工作流中的后续步骤。

我发现以下示例显示(靠近页面底部)如何编写一个事件来等待文件到达特定目录:

Creating Custom Activities with Workflow 4.0

这个例子有几个问题。首先,当我添加以下代码时:

void FileCreated(object sender, FileSystemEventArgs e)
{
instance.ResumeBookmark(bookmarkName, e.FullPath);
fsw.Dispose();
}

instance.Resumebookmark(...) 似乎不可用,但 instance.BeginResumeBookmarkinstance.EndResumeBookmark 可用。

我也不确定如何改变它来处理外部进程,而不是仅仅观察目录的内容。

对于这种事情,这甚至是最好的方法吗?

最佳答案

我建议编写一个 AyncCodeActivity 并完全避免使用书签。以下是返回流程退出代码作为结果的自定义事件示例:

    public sealed class RunProcess : AsyncCodeActivity<int>
{
public InArgument<string> FileName { get; set; }
public InArgument<string> Arguments { get; set; }

private Func<string, string, int> runProcessAsyncCall;

protected override IAsyncResult BeginExecute(AsyncCodeActivityContext context, AsyncCallback callback, object state)
{
this.runProcessAsyncCall = this.RunProcessImpl;
return runProcessAsyncCall.BeginInvoke(FileName.Get(context), Arguments.Get(context), callback, state);
}

protected override int EndExecute(AsyncCodeActivityContext context, IAsyncResult result)
{
return this.runProcessAsyncCall.EndInvoke(result);
}

private int RunProcessImpl(string fileName, string arguments)
{
Process p = Process.Start(fileName, arguments);
p.WaitForExit();
return p.ExitCode;
}
}

一般来说,如果外部事件可能在很长一段时间内不会出现,书签就非常有用。如果您调用的进程是短暂的,AsyncCodeActivity 可能是更好的选择(它当然更容易管理)。

关于workflow-foundation - Workflow 4.0 自定义事件启动外部流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1875775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com