작업 2: 워크플로 일시 중단, 종료 및 다시 시작
이전 작업 작업 1: 이벤트 수신 및 처리에서는 Windows Workflow Foundation 런타임 엔진에서 발생하는 이벤트에 응답하기 위해 이벤트 처리기를 만드는 방법을 살펴봤습니다. 이 작업에서는 개별 워크플로를 실행하여 발생하는 이벤트를 수신하고 응답하는 방법을 보여 줍니다. 특히 이 작업에서는 특정 워크플로 이벤트에 대한 이벤트 처리기를 만들어 워크플로의 일시 중단, 다시 시작 및 종료를 수행하는 방법을 보여 줍니다..
참고
이 연습을 차례대로 수행하는 것이 좋지만 반드시 그럴 필요는 없습니다. 샘플 프로젝트를 열고 다음 단원의 단계를 진행하여 이 연습을 시작할 수 있습니다.
이벤트에 대한 이벤트 처리기를 만들려면
Program 클래스의 Main 메서드에서 WorkflowRuntime 개체 이벤트 처리기 뒤에 workflowRuntime 개체에 정의된 WorkflowSuspended 이벤트에 대한 이벤트 처리기를 만듭니다.
workflowRuntime.WorkflowSuspended += new EventHandler<WorkflowSuspendedEventArgs> (workflowRuntime_WorkflowSuspended);
workflowRuntime 개체에 정의된 WorkflowResumed 이벤트에 대한 이벤트 처리기를 만듭니다.
workflowRuntime.WorkflowResumed += new EventHandler<WorkflowEventArgs>(workflowRuntime_WorkflowResumed);
workflowRuntime 개체에 정의된 WorkflowTerminated 이벤트에 대한 이벤트 처리기를 만듭니다.
workflowRuntime.WorkflowTerminated += new EventHandler<WorkflowTerminatedEventArgs> (workflowRuntime_WorkflowTerminated);
WorkflowSuspended, WorkflowResumed 및 WorkflowTerminated 이벤트에 대한 이벤트 처리기 메서드를 만들려면
Program 클래스에서 sender라는 Object와 e라는 WorkflowSuspendedEventArgs를 매개 변수로 사용하는 workflowRuntime_WorkflowSuspended라는 새 static 메서드를 만듭니다.
workflowRuntime_WorkflowSuspended 메서드에서 WriteLine을 사용하여 WorkflowSuspendedEventArgs 매개 변수의 Error 속성을 통해 정보 메시지를 표시합니다.
workflowRuntime_WorkflowSuspended 메서드에서 WorkflowSuspendedEventArgs 매개 변수에 정의된 WorkflowInstance 개체에서 Resume 메서드를 호출하여 워크플로를 다시 시작합니다.
static void workflowRuntime_WorkflowSuspended(object sender, WorkflowSuspendedEventArgs e) { Console.WriteLine("Workflow suspended: {0}", e.Error); e.WorkflowInstance.Resume(); }
Program 클래스에서 sender라는 Object와 e라는 WorkflowEventArgs를 매개 변수로 사용하는 workflowRuntime_WorkflowResumed라는 새 static 메서드를 만듭니다.
workflowRuntime_WorkflowResumed 메서드에서 WriteLine 메서드를 사용하여 정보 메시지를 표시합니다.
static void workflowRuntime_WorkflowResumed(object sender, WorkflowEventArgs e) { Console.WriteLine("Workflow resumed"); }
Program 클래스에서 sender라는 Object와 e라는 WorkflowTerminatedEventArgs를 매개 변수로 사용하는 workflowRuntime_WorkflowTerminated라는 새 static 메서드를 만듭니다.
workflowRuntime_WorkflowTerminated 메서드에서 WriteLine을 사용하여 WorkflowTerminatedEventArgs 매개 변수의 Message 속성을 통해 정보 메시지를 표시합니다.
WorkflowTerminated 이벤트를 받으면 워크플로의 실행이 완료된 것이기 때문에 waitHandle 개체에 정의된 Set 메서드를 호출하여 응용 프로그램을 적절하게 닫습니다.
static void workflowRuntime_WorkflowTerminated(object sender, WorkflowTerminatedEventArgs e) { Console.WriteLine("Workflow Terminated : {0}", e.Exception.Message); waitHandle.Set(); }
워크플로를 일시 중단하고 종료하려면
Program 클래스의 Main 메서드에서 CreateWorkflow를 호출하여 만들어지는 WorkflowInstance 개체에 정의된 Suspend 메서드를 호출합니다.
참고
Suspend 메서드는 WorkflowInstance에 정의된 Start 메서드를 사용하여 워크플로를 시작한 후 호출되어야 합니다.
프로젝트를 빌드하고 응용 프로그램을 실행합니다. Started 이벤트를 받은 후 응용 프로그램이 워크플로를 일시 중단합니다. 런타임에서 WorkflowSuspended 이벤트가 발생하고 해당 이벤트에 대한 처리기가 Resume 메서드를 호출하여 워크플로를 다시 시작하고 실행을 계속합니다.
workflowInstance.Start workflowInstance.Suspend("Suspending workflow")
workflowInstance.Start(); workflowInstance.Suspend("Suspending workflow");
이 절차의 1단계에서 만든 코드를 주석으로 처리하고 WorkflowInstance 개체에 정의된 Terminate 메서드를 호출합니다.
프로젝트를 빌드하고 응용 프로그램을 실행합니다. Started 이벤트를 받은 후 응용 프로그램이 워크플로를 종료합니다. 런타임에서 WorkflowTerminated 이벤트가 발생하고 응용 프로그램이 Windows Workflow Foundation 런타임 엔진을 중지하고 종료됩니다.
참고
이 자습서의 다음 연습을 진행하기 전에 Terminate 메서드 호출을 주석으로 처리하고 이 절차의 1단계에서 만든 Suspend 호출의 주석 처리를 제거합니다.
workflowInstance.Start workflowInstance.Terminate("Terminating workflow")
workflowInstance.Start(); workflowInstance.Terminate("Terminating workflow");
코드 컴파일
코드 컴파일에 대한 자세한 내용은 코드 컴파일을 참조하십시오.
연습 4: 런타임 서비스 사용에서는 Windows Workflow Foundation 런타임 엔진에 서비스를 추가하는 두 가지 방법을 알아봅니다.
참고 항목
참조
기타 리소스
Copyright © 2007 by Microsoft Corporation. All rights reserved.