다음을 통해 공유


워크플로 실행

워크플로 형식이나 XAML 기반 워크플로 마크업을 통해 워크플로 인스턴스를 시작할 수 있습니다.

워크플로 형식을 통해 워크플로 인스턴스를 시작하려면 CreateWorkflow 메서드를 호출하여 워크플로의 System.Type을 전달한 다음 Start를 호출합니다.

Dim workflowInstance As WorkflowInstance
workflowInstance = workflowRuntime.CreateWorkflow(GetType(Workflow1))
workflowInstance.Start()
WorkflowInstance instance = workflowRuntime.CreateWorkflow
    (typeof(WorkflowApplication.Workflow1));
instance.Start();

워크플로 마크업만 사용하여 워크플로 인스턴스를 시작하려면 CreateWorkflow 메서드를 호출하여 파일이나 스트림에 워크플로 정의를 포함하는 XmlReader를 전달한 다음 Start를 호출합니다.

Dim workflowInstance As WorkflowInstance
workflowInstance = workflowRuntime.CreateWorkflow(workflowDefinitionReader)
workflowInstance.Start()
WorkflowInstance instance = workflowRuntime.CreateWorkflow(workflowDefinitionReader);
instance.Start();

참고

코드 분리 파일을 사용하여 워크플로 마크업 파일을 사용하는 경우 워크플로 마크업 파일을 전달하는 대신 워크플로 형식을 CreateWorkflow로 전달해야 합니다.

기본적으로 워크플로는 Windows Workflow 런타임 엔진에서 비동기적으로 시작됩니다. 워크플로의 실행이 완료되기 전에 호스트 응용 프로그램이 닫히지 않도록 하려면 .NET Framework에서 제공하는 AutoResetEvent 개체와 같은 동기화 스레딩 개체를 사용해야 합니다. 다음 코드 예제에서는 워크플로 런타임을 만들고 시작하며 워크플로 인스턴스를 시작하고 WorkflowRuntime 개체가 WorkflowCompleted 이벤트를 발생시킬 때 AutoResetEvent를 사용하여 종료하는 방법을 보여 줍니다.

Class Program

    Shared WaitHandle As New AutoResetEvent(False)

    Shared Sub Main()
        Using workflowRuntime As New WorkflowRuntime()
            AddHandler workflowRuntime.WorkflowCompleted, AddressOf OnWorkflowCompleted

            Dim workflowInstance As WorkflowInstance
            workflowInstance = workflowRuntime.CreateWorkflow(GetType(Workflow1))
            workflowInstance.Start()
            WaitHandle.WaitOne()
        End Using
    End Sub

    Shared Sub OnWorkflowCompleted(ByVal sender As Object, ByVal e As WorkflowCompletedEventArgs)
        WaitHandle.Set()
    End Sub
End Class
static void Main(string[] args)
{
    using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
    {
        AutoResetEvent waitHandle = new AutoResetEvent(false);

        workflowRuntime.WorkflowCompleted += delegate(object sender,
            WorkflowCompletedEventArgs e)
        { 
            waitHandle.Set(); 
        };
        
        WorkflowInstance instance = workflowRuntime.CreateWorkflow
            (typeof(WorkflowApplication.Workflow1));

        instance.Start();

        waitHandle.WaitOne();
    }
}

Windows Workflow Foundation에는 호스팅 응용 프로그램의 실행 환경에 대한 제한이 없습니다. 예를 들어, 일부 호스트 응용 프로그램 환경에서는 실행되는 다른 프로세스와 독립적인 자체 스레딩 모델을 가진 몇몇 프로세스가 여러 응용 프로그램 도메인에서 실행되어야 할 수 있습니다. 이에 따라 Windows Workflow Foundation은 기본 호스팅 아키텍처가 변경되어도 이식과 확장이 가능합니다.

참고

Windows Workflow Foundation에서는 .NET 스레드 풀을 사용합니다. 호스트 응용 프로그램이 다중 스레드 응용 프로그램이고 .NET 스레드 풀을 광범위하게 사용하는 경우 .NET 스레드 풀이 고갈될 수 있습니다. Transaction 개체도 .NET 스레드 풀을 사용하므로 이로 인해 유지 서비스가 지속성 트랜잭션을 완료하려고 할 때 시간이 초과될 수 있습니다.

참고 항목

개념

WorkflowRuntime 만들기
WorkflowRuntime 이벤트 처리

Copyright © 2007 by Microsoft Corporation. All rights reserved.