3

Workflow 4.0을 사용해 본 후 외부 실행 파일을 시작하고 해당 프로세스가 완료 될 때까지 기다린 후 워크 플로의 후속 단계를 다시 시작하기 위해 사용자 지정 작업을 작성하려고합니다.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하지만이 가능하지 않는 것 같습니다.

디렉토리의 내용을 보는 것보다는 외부 프로세스를 처리하는 방법을 변경하는 방법을 잘 모르겠습니다.

이런 종류의 일에 가장 적합한 방법인가요?

답변

3

나는 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가 더 나은 선택 일 수 있습니다 (더 쉽게 관리 할 수 ​​있습니다).

2

이 방법은 다른 프로세스를 실행하는 데 완벽하게 적합합니다. Process.WaitForExit을 사용하여 프로세스가 완료되면 확인하고 선택적으로 ExitCode을 확인한 다음 책갈피를 다시 시작하십시오.

+0

나는 이것을 제안 할 예정이었습니다. 다른 하나는 사용자 정의 액티비티를 작성하는 대신 InvokeMethod 활동으로이 작업을 수행 할 수 있다는 것입니다. –