워크 플로 4.0 외부 프로세스를 시작하기위한 사용자 정의 활동
-
18-09-2019 - |
문제
워크 플로 4.0을 시도하고 외부 실행 파일을 시작하기 위해 사용자 정의 활동을 작성하고 해당 프로세스가 완료 될 때까지 기다린 다음 워크 플로에서 후속 단계를 재개합니다.
파일이 특정 디렉토리에 도착하기를 기다리는 활동을 작성하는 방법을 보여주는 다음 예를 찾았습니다.
예제에 몇 가지 문제가 있습니다. 첫째, 다음 코드를 추가 할 때 :
void FileCreated(object sender, FileSystemEventArgs e)
{
instance.ResumeBookmark(bookmarkName, e.FullPath);
fsw.Dispose();
}
instance.Resumebookmark(...)
사용 가능한 것 같지만 instance.BeginResumeBookmark
그리고 instance.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;
}
}
일반적으로 외부 이벤트가 잠재적으로 오랫동안 오지 않으면 북마크가 좋습니다. 호출하는 프로세스가 수명이 짧은 경우 비동기 반응성이 더 나은 선택 일 수 있습니다 (확실히 관리하기가 더 쉽습니다).
다른 팁
이 접근법은 다른 프로세스를 실행하는 데 완벽하게 작동합니다. 프로세스를 사용하여 프로세스가 완료된시기를 확인하려면 waitforexit을 선택하여 선택적으로 확인하십시오. 종료 코드, 북마크를 재개하십시오.
제휴하지 않습니다 StackOverflow