Compartilhar via


WorkflowInstance.EnqueueItemOnIdle Método

Definição

Posta uma mensagem na fila de fluxo de trabalho especificada quando o fluxo de trabalho está ocioso. EnqueueItemOnIdle(IComparable, Object, IPendingWork, Object) espera até que o fluxo de trabalho atinja um ponto de ociosidade e seja enfileirado depois de verificar se o agendador de fluxo de trabalho está ocioso (ou seja, se nenhuma operação ativa está sendo executada).

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)

Parâmetros

queueName
IComparable

O nome do WorkflowQueue.

item
Object

O objeto a ser enfileirado.

pendingWork
IPendingWork

Um IPendingWork que permite que o remetente seja notificado quando um item for entregue.

workItem
Object

Um objeto a ser passado para os métodos IPendingWork.

Exceções

queueName é uma referência nula (Nothing no Visual Basic).

O mecanismo de runtime de fluxo de trabalho não está em execução.

- ou - A instância de fluxo de trabalho é suspensa.

- ou - A WorkflowQueue especificada por queueName não existe.

- ou - A WorkflowQueue especificada por queueName não está habilitada.

Exemplos

O exemplo a seguir demonstra o envio de informações para uma instância de fluxo de trabalho usando o EnqueueItemOnIdle método. Primeiro, um objeto WorkflowInstance é criado e iniciado; em seguida, um objeto que implementa a IPendingWork interface é criado. EnqueueItemOnIdle em seguida, é chamado, passando valores de cadeia de caracteres para o nome da fila, o item enfileirado e o item de trabalho a ser passado para os métodos do objeto 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")

Comentários

Aguarda a instância do fluxo de trabalho ficar ociosa e, em seguida, envia o item para o especificado WorkflowQueue. Se você chamar EnqueueItemOnIdle enquanto a instância do fluxo de trabalho estiver suspensa, o mecanismo de runtime do fluxo de trabalho gerará um InvalidOperationException. Se você quiser ser notificado quando a mensagem for entregue, poderá implementar IPendingWork em seu serviço e passar um workItem e um IPendingWork objeto para EnqueueItem. Se você não quiser essa notificação, poderá passar uma referência nula (Nothingem Visual Basic) para pendingWork e workItem.

Quando você estiver usando esse método com um fluxo de trabalho do computador de estado, poderá obter uma exceção que contenha a mensagem "Fila '{0}' não está habilitada". Isso ocorre quando o estado atual do computador de estado não sabe como lidar com um evento específico. Por exemplo, quando algum estado diferente do estado atual contém o EventDrivenActivity que contém o HandleExternalEventActivity que é representado pela fila '{0}'.

Aplica-se a