문제

워크 플로 4.0을 시도하고 외부 실행 파일을 시작하기 위해 사용자 정의 활동을 작성하고 해당 프로세스가 완료 될 때까지 기다린 다음 워크 플로에서 후속 단계를 재개합니다.

파일이 특정 디렉토리에 도착하기를 기다리는 활동을 작성하는 방법을 보여주는 다음 예를 찾았습니다.

워크 플로를 사용하여 사용자 정의 활동 생성 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을 선택하여 선택적으로 확인하십시오. 종료 코드, 북마크를 재개하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top