我建议编写一个 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 可能是一个更好的选择(它当然更容易管理)。