Partager via


WorkflowInstance.EnqueueItemOnIdle 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. 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).

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.

item
Object

Objet à mettre en file d'attente.

pendingWork
IPendingWork

IPendingWork autorisant l'expéditeur à être notifié lorsque l'item est remis.

workItem
Object

Objet à passer aux méthodes IPendingWork.

Exceptions

queueName est une référence Null (Nothing en Visual Basic).

Le moteur d'exécution de workflow ne s'exécute pas.

  • ou - L'instance de workflow est interrompue.

  • ou - La WorkflowQueue spécifiée par queueName n'existe pas.

  • ou - La WorkflowQueue spécifiée par queueName n'est pas activée.

Exemples

L'exemple suivant présente l'envoi d'informations à une instance de workflow à l'aide de la méthode EnqueueItemOnIdle. En premier lieu, un objet WorkflowInstance est créé et démarré ; ensuite, un objet qui implémente l'interface IPendingWork est créé. EnqueueItemOnIdle est ensuite appelé, en passant des valeurs de chaîne pour le nom de la file d’attente, l’élément en file d’attente et l’élément de travail à transmettre aux méthodes de l’objet 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")

Remarques

Attend que l'instance de workflow devienne inactive puis envoie l'item dans la WorkflowQueue spécifiée. Si vous appelez EnqueueItemOnIdle alors que l'instance de workflow est suspendue, le moteur d'exécution de workflow va lever une 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. Si vous ne souhaitez pas telle notification, vous pouvez passer une référence Null (Nothing en Visual Basic) pour pendingWork et workItem.

Lorsque vous utilisez cette méthode avec un flux de travail d’ordinateur d’état, vous pouvez obtenir une exception qui contient le message « File d’attente «{0} n’est pas activé ». Cela se produit lorsque l'état actuel de l'ordinateur d'état ne sait pas comment gérer un événement spécifique. 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}'.

S’applique à