次の方法で共有


ワークフローの実行

ワークフロー インスタンスは、ワークフローの型または XAML に基づくワークフロー マークアップを使用して開始できます。

ワークフローの型を使用してワークフロー インスタンスを開始するには、ワークフローの System.Type を渡してCreateWorkflow メソッドを呼び出し、Start を呼び出します。

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

ワークフロー マークアップのみを使用してワークフロー インスタンスを開始するには、ファイルかストリーム内のどちらかにワークフローの定義を含む XmlReader を渡して CreateWorkflow メソッドを呼び出し、Start を呼び出します。

Dim workflowInstance As WorkflowInstance
workflowInstance = workflowRuntime.CreateWorkflow(workflowDefinitionReader)
workflowInstance.Start()
WorkflowInstance instance = workflowRuntime.CreateWorkflow(workflowDefinitionReader);
instance.Start();
Bb924456.note(ja-jp,VS.90).gifメモ :
コード分離ファイルと共にワークフロー マークアップ ファイルを使用する場合は、ワークフロー型を、ワークフロー マークアップ ファイルではなく、CreateWorkflow に渡す必要があります。

既定では、ワークフローは Windows Workflow ランタイム エンジンによって非同期的に実行されます。ワークフローの実行が終了する前に、ホスト アプリケーションが閉じないようにするには、AutoResetEvent オブジェクトなど、.NET Framework に用意されている同期操作スレッド処理オブジェクトを使用する必要があります。次のコード サンプルでは、ワークフロー ランタイムを作成して開始し、ワークフロー インスタンスを開始し、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 の移植性と拡張性は維持されます。

Bb924456.note(ja-jp,VS.90).gifメモ :
Windows Workflow Foundation は、.NET スレッド プールを使用します。ホスト アプリケーションがマルチ スレッドで、.NET スレッド プールを広範に使用する場合、.NET スレッド プールを使い果たしてしまう場合があります。これにより、永続性サービスが永続性トランザクションを完了しようとするときにタイムアウトが発生する可能性があります。これは、Transaction オブジェクトも .NET スレッド プールを使用するからです。

関連項目

概念

WorkflowRuntime の作成
WorkflowRuntime イベントの処理

Copyright © 2007 by Microsoft Corporation. All rights reserved.