Partilhar via


Dispatcher Classe

Definição

Fornece serviços para gerenciar a fila de itens de trabalho de um thread.

public ref class Dispatcher sealed
public sealed class Dispatcher
type Dispatcher = class
Public NotInheritable Class Dispatcher
Herança
Dispatcher

Exemplos

O exemplo a seguir mostra como colocar uma operação em um Dispatcher. Para obter o código-fonte completo deste exemplo, consulte o aplicativo de thread único com Long-Running exemplo de cálculo.

Primeiro, um delegado é criado que não aceita argumentos.

public delegate void NextPrimeDelegate();
Public Delegate Sub NextPrimeDelegate()

Em seguida, BeginInvoke(DispatcherPriority, Delegate) é chamado. Essa chamada usa BeginInvoke(DispatcherPriority, Delegate) dois parâmetros: a prioridade, que é definida como DispatcherPriority.Normal, e o retorno de chamada, que é passado por meio de uma instância do delegado NextPrimeDelegate.

startStopButton.Dispatcher.BeginInvoke(
    DispatcherPriority.Normal,
    new NextPrimeDelegate(CheckNextNumber));
startStopButton.Dispatcher.BeginInvoke(DispatcherPriority.Normal, New NextPrimeDelegate(AddressOf CheckNextNumber))

Comentários

A Dispatcher mantém uma fila priorizada de itens de trabalho para um thread específico.

Quando um Dispatcher é criado em um thread, ele se torna o único Dispatcher que pode ser associado ao thread, mesmo que ele Dispatcher seja desligado.

Se você tentar obter o CurrentDispatcher thread atual e um Dispatcher não estiver associado ao thread, um Dispatcher será criado. Um Dispatcher também é criado quando você cria um DispatcherObject. Se você criar um Dispatcher thread em segundo plano, desligue o dispatcher antes de sair do thread.

Se um Dispatcher for desligado, ele não poderá ser reiniciado.

No WPF, um DispatcherObject só pode ser acessado pelo Dispatcher que está associado. Por exemplo, um thread em segundo plano não pode atualizar o conteúdo de um Button associado ao Dispatcher thread da interface do usuário. Para que o thread em segundo plano acesse a Content propriedade do Buttonthread em segundo plano, o thread em segundo plano deve delegar o trabalho ao Dispatcher thread de interface do usuário associado. Isso é feito usando ou Invoke BeginInvoke. Invoke é síncrono e BeginInvoke é assíncrono. A operação é adicionada à fila da Dispatcher na especificada DispatcherPriority.

Se BeginInvoke for chamado em um Dispatcher que tenha sido desligado, a propriedade de status do retornado DispatcherOperation será definida como Aborted.

Todos os métodos em Dispatcher, com exceção de DisableProcessing, são de thread livre.

Objetos derivados têm afinidade de DispatcherObject thread.

Os objetos que Freezable derivam são encadeados livremente quando são congelados. Para obter mais informações, consulte a Visão geral de objetos congeláveis.

Propriedades

CurrentDispatcher

Obtém o Dispatcher para o thread em execução no momento e cria um novo Dispatcher se um não estiver associado ao thread.

HasShutdownFinished

Determina se o Dispatcher terminou de desligar.

HasShutdownStarted

Determina se o Dispatcher está desligando.

Hooks

Obtém a coleção de ganchos que fornecem informações adicionais do evento sobre o Dispatcher.

Thread

Obtém o thread ao qual este Dispatcher está associado.

Métodos

BeginInvoke(Delegate, DispatcherPriority, Object[])

Executa o delegado especificado assincronamente com os argumentos especificados, na prioridade especificada, no thread no qual o Dispatcher foi criado.

BeginInvoke(Delegate, Object[])

Executa o delegado especificado de maneira assíncrona com os argumentos especificados no thread em que o Dispatcher foi criado.

BeginInvoke(DispatcherPriority, Delegate)

Executa o delegado especificado de forma assíncrona na prioridade especificada no thread ao qual o Dispatcher está associado.

BeginInvoke(DispatcherPriority, Delegate, Object)

Executa o delegado especificado de forma assíncrona na prioridade especificada e com o argumento especificado no thread ao qual o Dispatcher está associado.

BeginInvoke(DispatcherPriority, Delegate, Object, Object[])

Executa o delegado especificado de forma assíncrona na prioridade especificada e com a matriz de argumentos definida no thread ao qual o Dispatcher está associado.

BeginInvokeShutdown(DispatcherPriority)

Inicia o desligamento do Dispatcher de forma assíncrona.

CheckAccess()

Determina se o thread de chamada é o thread associado a esse Dispatcher.

DisableProcessing()

Desabilita o processamento da fila de Dispatcher.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
ExitAllFrames()

Solicita que todos os quadros saiam, incluindo quadros aninhados.

FromThread(Thread)

Obtém o Dispatcher para o thread especificado.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
Invoke(Action)

Executa o Action especificado de forma síncrona no thread ao qual o Dispatcher está associado.

Invoke(Action, DispatcherPriority)

Executa a Action especificada de forma síncrona na prioridade especificada no thread ao qual o Dispatcher está associado.

Invoke(Action, DispatcherPriority, CancellationToken)

Executa a Action especificada de forma síncrona na prioridade especificada no thread ao qual o Dispatcher está associado.

Invoke(Action, DispatcherPriority, CancellationToken, TimeSpan)

Executa a Action especificada de forma síncrona na prioridade especificada no thread ao qual o Dispatcher está associado.

Invoke(Delegate, DispatcherPriority, Object[])

Executa o delegado especificado na prioridade especificada com os argumentos especificados de forma síncrona no thread ao qual o Dispatcher está associado.

Invoke(Delegate, Object[])

Executa o delegado especificado com os argumentos de forma síncrona no thread ao qual o Dispatcher está associado.

Invoke(Delegate, TimeSpan, DispatcherPriority, Object[])

Executa o delegado especificado no período designado na prioridade especificada com os argumentos especificados de forma síncrona no thread ao qual o Dispatcher está associado.

Invoke(Delegate, TimeSpan, Object[])

Executa o delegado especificado no período designado na prioridade especificada com os argumentos especificados de forma síncrona no thread ao qual o Dispatcher está associado.

Invoke(DispatcherPriority, Delegate)

Executa o delegado especificado de forma síncrona na prioridade especificada no thread ao qual ele Dispatcher está associado.

Invoke(DispatcherPriority, Delegate, Object)

Executa o delegado especificado na prioridade especificada com o argumentos especificado de forma síncrona no thread ao qual o Dispatcher está associado.

Invoke(DispatcherPriority, Delegate, Object, Object[])

Executa o delegado especificado na prioridade especificada com os argumentos especificados de forma síncrona no thread ao qual o Dispatcher está associado.

Invoke(DispatcherPriority, TimeSpan, Delegate)

Executa o delegado especificado, de forma síncrona, com a prioridade especificada e com o valor de tempo limite especificado no thread em que Dispatcher foi criado.

Invoke(DispatcherPriority, TimeSpan, Delegate, Object)

Executa o delegado especificado na prioridade especificada com o argumentos especificado de forma síncrona no thread ao qual o Dispatcher está associado.

Invoke(DispatcherPriority, TimeSpan, Delegate, Object, Object[])

Executa o delegado especificado na prioridade especificada com os argumentos especificados de forma síncrona no thread ao qual o Dispatcher está associado.

Invoke<TResult>(Func<TResult>)

Executa o Func<TResult> especificado de forma síncrona no thread ao qual o Dispatcher está associado.

Invoke<TResult>(Func<TResult>, DispatcherPriority)

Executa a Func<TResult> especificada de forma síncrona na prioridade especificada no thread ao qual o Dispatcher está associado.

Invoke<TResult>(Func<TResult>, DispatcherPriority, CancellationToken)

Executa a Func<TResult> especificada de forma síncrona na prioridade especificada no thread ao qual o Dispatcher está associado.

Invoke<TResult>(Func<TResult>, DispatcherPriority, CancellationToken, TimeSpan)

Executa a Func<TResult> especificada de forma síncrona na prioridade especificada no thread ao qual o Dispatcher está associado.

InvokeAsync(Action)

Executa o Action especificado de forma assíncrona no thread ao qual o Dispatcher está associado.

InvokeAsync(Action, DispatcherPriority)

Executa o Action especificado de forma assíncrona na prioridade especificada no thread ao qual Dispatcher está associado.

InvokeAsync(Action, DispatcherPriority, CancellationToken)

Executa o Action especificado de forma assíncrona na prioridade especificada no thread ao qual Dispatcher está associado.

InvokeAsync<TResult>(Func<TResult>)

Executa o Func<TResult> especificado de forma assíncrona no thread ao qual o Dispatcher está associado.

InvokeAsync<TResult>(Func<TResult>, DispatcherPriority)

Executa o Func<TResult> especificado de forma assíncrona na prioridade especificada no thread ao qual Dispatcher está associado.

InvokeAsync<TResult>(Func<TResult>, DispatcherPriority, CancellationToken)

Executa o Func<TResult> especificado de forma assíncrona na prioridade especificada no thread ao qual Dispatcher está associado.

InvokeShutdown()

Inicia o processo de desligamento do Dispatcher sincronicamente.

MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
PushFrame(DispatcherFrame)

Insere um loop de execução.

Run()

Envia o quadro principal de execução na fila de eventos do Dispatcher.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
ValidatePriority(DispatcherPriority, String)

Determina se o DispatcherPriority especificado é uma prioridade válida.

VerifyAccess()

Determina se o thread de chamada tem acesso a este Dispatcher.

Yield()

Cria um objeto aguardável que transfere o controle de volta para o dispatcher atual e fornece uma oportunidade para o dispatcher processar outros eventos de forma assíncrona.

Yield(DispatcherPriority)

Cria um objeto aguardável que transfere o controle de volta para o dispatcher atual e fornece uma oportunidade para o dispatcher processar outros eventos de forma assíncrona. O trabalho que ocorre quando o controle retorna para o código aguardando o resultado deste método é agendado com a prioridade especificada.

Eventos

ShutdownFinished

Ocorre quando o Dispatcher conclui o desligamento.

ShutdownStarted

Ocorre quando o Dispatcher inicia o desligamento.

UnhandledException

Ocorre quando uma exceção de thread é lançada e não capturada durante a execução de um delegado por meio de Invoke ou BeginInvoke.

UnhandledExceptionFilter

Ocorre quando uma exceção de thread é lançada e não capturada durante a execução de um delegado por meio de Invoke ou BeginInvoke quando no estágio de filtragem.

Métodos de Extensão

BeginInvoke(Dispatcher, Action)

Executa o delegado especificado de maneira assíncrona com prioridade normal no thread em que o Dispatcher especificado foi criado.

BeginInvoke(Dispatcher, Action, DispatcherPriority)

Executa o delegado especificado de maneira assíncrona com prioridade especificada no thread em que o Dispatcher especificado foi criado.

Invoke(Dispatcher, Action)

Executa o delegado especificado de maneira síncrona com prioridade normal no thread em que o Dispatcher especificado foi criado.

Invoke(Dispatcher, Action, TimeSpan)

Executa o delegado especificado de forma síncrona no thread em que o Dispatcher especificado foi criado e para a execução após o período de tempo limite especificado.

Invoke(Dispatcher, Action, TimeSpan, DispatcherPriority)

Executa o delegado especificado de forma síncrona com a propriedade especificada no thread em que o Dispatcher especificado foi criado e para a execução após o período de tempo limite especificado.

Invoke(Dispatcher, Action, DispatcherPriority)

Executa o delegado especificado de maneira síncrona com prioridade especificada no thread em que o Dispatcher especificado foi criado.

Aplica-se a

Confira também