WorkflowInstance.EnqueueItemOnIdle(IComparable, Object, IPendingWork, Object) Méthode

Définition

Publie un message dans la file d'attente de flux de travail spécifiée lorsque le flux de travail est inactif.Posts a message to the specified workflow queue when the workflow is idle. EnqueueItemOnIdle(IComparable, Object, IPendingWork, Object) attend que le flux de travail atteigne un point d'inactivité et se met en file d'attente après avoir vérifié que le programmateur de flux de travail est inactif (autrement dit, aucune opération active n'est exécutée).EnqueueItemOnIdle(IComparable, Object, IPendingWork, Object) waits until the workflow reaches an idle point and enqueues after verifying that the workflow scheduler is idle (that is, no active operation is being executed).

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)

Paramètres

queueName
IComparable

Nom de l'objet WorkflowQueue.The name of the WorkflowQueue.

item
Object

Objet à mettre en file d'attente.The object to enqueue.

pendingWork
IPendingWork

IPendingWork autorisant l'expéditeur à être notifié lorsque l'item est remis.An IPendingWork that allows the sender to be notified when item is delivered.

workItem
Object

Objet à passer aux méthodes IPendingWork.An object to be passed to the IPendingWork methods.

Exceptions

queueName est une référence Null (Nothing en Visual Basic).queueName is a null reference (Nothing in Visual Basic).

Le moteur d'exécution de workflow ne s'exécute pas.The workflow runtime engine is not running.

- ou --or- L'instance de workflow est interrompue.The workflow instance is suspended.

- ou --or- La WorkflowQueue spécifiée par queueName n'existe pas.The WorkflowQueue specified by queueName does not exist.

- ou --or- La WorkflowQueue spécifiée par queueName n'est pas activée.The WorkflowQueue specified by queueName is not enabled.

Exemples

L'exemple suivant présente l'envoi d'informations à une instance de workflow à l'aide de la méthode EnqueueItemOnIdle.The following example demonstrates sending information to a workflow instance using the EnqueueItemOnIdle method. En premier lieu, un objet WorkflowInstance est créé et démarré ; ensuite, un objet qui implémente l'interface IPendingWork est créé.First, a WorkflowInstance object is created and started; next, an object that implements the IPendingWork interface is created. EnqueueItemOnIdle est ensuite appelé, en passant dans les valeurs de chaîne pour le nom de la file d’attente, l’élément mis en file d’attente et l’élément de travail à passer aux méthodes de l’objet pendingWork.EnqueueItemOnIdle is then called, passing in string values for the queue name, the enqueued item, and the work item to be passed to the methods of the pendingWork object.

// 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")

Remarques

Attend que l'instance de workflow devienne inactive puis envoie l'item dans la WorkflowQueue spécifiée.Waits for the workflow instance to become idle and then sends the item to the specified WorkflowQueue. Si vous appelez EnqueueItemOnIdle alors que l'instance de workflow est suspendue, le moteur d'exécution de workflow va lever une InvalidOperationException.If you call EnqueueItemOnIdle while the workflow instance is suspended, the workflow runtime engine will throw an InvalidOperationException. Si vous souhaitez être notifié lorsque le message est remis, vous pouvez implémenter IPendingWork dans votre service et passer un workItem et un objet IPendingWork à EnqueueItem.If you want to be notified when the message is delivered, you can implement IPendingWork in your service and pass a workItem and an IPendingWork object to EnqueueItem. Si vous ne souhaitez pas telle notification, vous pouvez passer une référence Null (Nothing en Visual Basic) pour pendingWork et workItem.If you do not want such notification, you can pass a null reference (Nothing in Visual Basic) for pendingWork and workItem.

Lorsque vous utilisez cette méthode avec un workflow d’ordinateur d’État, vous pouvez obtenir une exception qui contient le message « la file d’attente « » {0} n’est pas activée».When you are using this method with a state machine workflow, you might get an exception that contains the message "Queue '{0}' is not enabled." Cela se produit lorsque l'état actuel de l'ordinateur d'état ne sait pas comment gérer un événement spécifique.This occurs when the current state of the state machine does not know how to handle a specific event. Par exemple, lorsqu'un état autre que l'état actuel contient la EventDrivenActivity contenant la HandleExternalEventActivity représentée par la file d'attente '{0}'.For example, when some state other than the current state contains the EventDrivenActivity that contains the HandleExternalEventActivity that is represented by the queue '{0}'.

S’applique à