次の方法で共有


WorkflowInstance.EnqueueItemOnIdle メソッド

定義

ワークフローがアイドル状態のときに、指定したワークフロー キューにメッセージをポストします。 EnqueueItemOnIdle(IComparable, Object, IPendingWork, Object) は、ワークフローがアイドル ポイントに達するまで待機し、ワークフロー スケジューラがアイドル状態である (つまりアクティブな操作が実行されていない) ことを確認した後にキューに登録します。

public:
 void EnqueueItemOnIdle(IComparable ^ queueName, System::Object ^ item, System::Workflow::Runtime::IPendingWork ^ pendingWork, System::Object ^ workItem);
public void EnqueueItemOnIdle (IComparable queueName, object item, System.Workflow.Runtime.IPendingWork pendingWork, object workItem);
member this.EnqueueItemOnIdle : IComparable * obj * System.Workflow.Runtime.IPendingWork * obj -> unit
Public Sub EnqueueItemOnIdle (queueName As IComparable, item As Object, pendingWork As IPendingWork, workItem As Object)

パラメーター

queueName
IComparable

WorkflowQueue の名前。

item
Object

キューに登録するオブジェクト。

pendingWork
IPendingWork

IPendingWork が配信されたときに送信者が通知を受けられるようにする item

workItem
Object

IPendingWork メソッドに渡すオブジェクト。

例外

queueName が null 参照 (Visual Basic の場合は Nothing) です。

ワークフロー ランタイム エンジンが実行されていません。

  • または - ワークフロー インスタンスが中断されています。

  • または - WorkflowQueue で指定された queueName が存在しません。

  • または - WorkflowQueue で指定された queueName が無効になっています。

次の例は、EnqueueItemOnIdle メソッドを使用してワークフロー インスタンスに情報を送信する方法を示しています。 最初に WorkflowInstance オブジェクトが作成されて開始されます。次に IPendingWork インターフェイスを実装するオブジェクトが作成されます。 EnqueueItemOnIdle が呼び出され、キュー名、エンキューされた項目、および pendingWork オブジェクトのメソッドに渡される作業項目の文字列値が渡されます。

// Create a workflow runtime environment
WorkflowRuntime workflowRuntime = new WorkflowRuntime();
// Create a new instance of the out-of-box SqlWorkflowPersistenceService.
// Use the non-locking constructor, since we're only creating a single Workflow Runtime.
NameValueCollection parameters = new NameValueCollection();
parameters.Add("ConnectionString",
    "Initial Catalog=SqlPersistenceService;Data Source=localhost;Integrated Security=SSPI;");
//Set UnloadOnIdle to true, so that the service will persist the workflow
parameters.Add("UnloadOnIdle", "true");
SqlWorkflowPersistenceService persistenceService =
   new SqlWorkflowPersistenceService(parameters);

// Add the service to the runtime
workflowRuntime.AddService(persistenceService);
// Create a WorkflowInstance object
WorkflowInstance workflowInstance = workflowRuntime.CreateWorkflow(typeof(Workflow1));
// Start the instance
workflowInstance.Start();
// Create an instance of a class that implements IPendingWork for notification
PendingService pendingWork = new PendingService();
// Send the workflow the message
workflowInstance.EnqueueItemOnIdle("ActionQueue", "StartWork", pendingWork, "ActionItem");
' Create a workflow runtime environment
Dim workflowRuntime As New WorkflowRuntime()
' Create a new instance of the out-of-box SqlWorkflowPersistenceService.
' Use the non-locking constructor, since we're only creating a single Workflow Runtime.
Dim parameters As New NameValueCollection()
parameters.Add("ConnectionString", _
    "Initial Catalog=SqlPersistenceServiceData Source=localhostIntegrated Security=SSPI")
'Set UnloadOnIdle to true, so that the service will persist the workflow
parameters.Add("UnloadOnIdle", "true")
Dim persistenceService As _
   New SqlWorkflowPersistenceService(parameters)

' Add the service to the runtime
workflowRuntime.AddService(persistenceService)
' Create a WorkflowInstance object
Dim workflowInstance As WorkflowInstance = workflowRuntime.CreateWorkflow(GetType(Workflow1))
' Start the instance
workflowInstance.Start()
' Create an instance of a class that implements IPendingWork for notification
Dim pendingWork As New PendingService()
' Send the workflow the message
workflowInstance.EnqueueItemOnIdle("ActionQueue", "StartWork", pendingWork, "ActionItem")

注釈

ワークフロー インスタンスがアイドル状態になるまで待機してから、指定した itemWorkflowQueue を送信します。 ワークフロー インスタンスが中断状態のときに EnqueueItemOnIdle を呼び出すと、ワークフロー ランタイム エンジンは InvalidOperationException をスローします。 メッセージが配信されたときに通知を受けるには、サービスに IPendingWork を実装して、workItem および IPendingWork オブジェクトを EnqueueItem に渡します。 そのような通知が不要な場合は、NothingpendingWork に null 参照 (Visual Basic の場合は workItem) を渡します。

ステート マシン ワークフローでこのメソッドを使用している場合、"Queue '{0}' is not enabled" というメッセージを含む例外が発生する可能性があります。 これは、ステート マシンの現在の状態では特定のイベントの処理方法を識別できないときに起こります。 たとえば、現在の状態以外の状態に、キュー '{0}' で表現される EventDrivenActivity を含む HandleExternalEventActivity が含まれている場合です。

適用対象