Sdílet prostřednictvím


WorkflowInstance.EnqueueItemOnIdle Metoda

Definice

Odešle zprávu do zadané fronty pracovního postupu, když je pracovní postup nečinný. EnqueueItemOnIdle(IComparable, Object, IPendingWork, Object) čeká, dokud pracovní postup nedosáhne nečinného bodu a po ověření, že plánovač pracovního postupu je nečinný (tj. nespustí se žádná aktivní operace).

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)

Parametry

queueName
IComparable

Název procesu WorkflowQueue.

item
Object

Objekt, který se má vytvořit do fronty.

pendingWork
IPendingWork

To IPendingWork umožňuje odesílateli dostávat oznámení při item doručení.

workItem
Object

Objekt, který se má předat metodám IPendingWork .

Výjimky

queueNameje odkaz na hodnotu null (Nothing v Visual Basic).

Modul runtime pracovního postupu není spuštěný.

-nebo- Instance pracovního postupu je pozastaveno.

-nebo- Zadaný WorkflowQueue uživatelem queueName neexistuje.

-nebo- Zadané WorkflowQueue uživatelem queueName není povoleno.

Příklady

Následující příklad ukazuje odeslání informací do instance pracovního postupu pomocí EnqueueItemOnIdle metody. Nejprve se vytvoří a spustí objekt WorkflowInstance; Dále se vytvoří objekt, který implementuje IPendingWork rozhraní. EnqueueItemOnIdle se pak volá, předává řetězcové hodnoty pro název fronty, zařaděnou položku a pracovní položku, která se má předat metodám čekajícíhowork objektu.

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

Poznámky

Počká, až se instance pracovního postupu stane nečinnou, a odešle item ji zadanému WorkflowQueue. Pokud zavoláte EnqueueItemOnIdle , když je instance pracovního postupu pozastavena, modul runtime pracovního postupu vyvolá InvalidOperationExceptionchybu . Pokud chcete být upozorněni při doručení zprávy, můžete implementovat IPendingWork ve své službě a předat workItem objekt a IPendingWork objekt .EnqueueItem Pokud takové oznámení nechcete, můžete předat nulový odkaz (Nothingv Visual Basic) pro pendingWork a workItem.

Pokud používáte tuto metodu s pracovním postupem stavového počítače, může dojít k výjimce, která obsahuje zprávu "Fronta '{0} není povolena". K tomu dochází v případě, že aktuální stav stavového počítače neví, jak zpracovat konkrétní událost. Pokud například nějaký jiný stav než aktuální stav obsahuje EventDrivenActivity ten, který HandleExternalEventActivity je reprezentován frontou "{0}".

Platí pro