DependencyObject.Dispatcher Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém o CoreDispatcher ao qual esse objeto está associado. O CoreDispatcher representa uma instalação que pode acessar o DependencyObject no thread da interface do usuário, mesmo que o código seja iniciado por um thread que não seja da interface do usuário.
public:
property CoreDispatcher ^ Dispatcher { CoreDispatcher ^ get(); };
CoreDispatcher Dispatcher();
public CoreDispatcher Dispatcher { get; }
var coreDispatcher = dependencyObject.dispatcher;
Public ReadOnly Property Dispatcher As CoreDispatcher
Valor da propriedade
O CoreDispatcher ao qual o objeto DependencyObject está associado, que representa o thread da interface do usuário.
Exemplos
Este exemplo mostra um uso do Dispatcher para o implícito este de um arquivo code-behind para uma Página. Este exemplo usa uma expressão lambda para adicionar a implementação DispatchedHandler . O manipulador em si está manipulando o evento Accelerometer.ReadingChanged , que não será executado no thread da interface do usuário.
private async void ReadingChanged(object sender, AccelerometerReadingChangedEventArgs e)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
AccelerometerReading reading = e.Reading;
ScenarioOutput_X.Text = String.Format("{0,5:0.00}", reading.AccelerationX);
ScenarioOutput_Y.Text = String.Format("{0,5:0.00}", reading.AccelerationY);
ScenarioOutput_Z.Text = String.Format("{0,5:0.00}", reading.AccelerationZ);
});
}
Comentários
A propriedade Dispatcher fornece a referência CoreDispatcher que pode ser usada para realizar marshaling de chamadas provenientes de threads que não são da interface do usuário, usando RunAsync e uma função aguardável. Para obter mais informações sobre funções aguardáveis, consulte Chamar APIs assíncronas em C# ou Visual Basic. Consulte também a seção "DependencyObject e threading" do tópico de referência DependencyObject .
Um DependencyObject deve ser criado em um thread de interface do usuário e ter afinidade com o thread da interface do usuário. Como é um ponto de entrada que permite a obtenção entre threads, DependencyObject.Dispatcher é a única API de instância de DependencyObject ou qualquer uma de suas subclasses que podem ser acessadas de um thread que não é da interface do usuário sem gerar uma exceção entre threads. Todas as outras APIs DependencyObject lançarão uma exceção se você tentar chamá-las de um thread de trabalho ou de outro thread que não seja da interface do usuário.
Especificamente, a propriedade Dispatcher obtém o CoreDispatcher associado ao thread da interface do usuário do aplicativo. A execução de código por meio do método RunAsync do CoreDispatcher será necessária se você pretende consultar ou alterar o valor de qualquer propriedade de dependência, mesmo que esse objeto ainda não esteja associado à árvore visual XAML ou à interface do usuário visível (a raiz visual da janela do aplicativo).
Window.Dispatcher também faz referência a um CoreDispatcher associado ao thread da interface do usuário. Window.Dispatcher é basicamente apenas um wrapper em torno de CoreWindow.Dispatcher para que uma classe Window tenha acesso fácil a ela.
Observação
A conexão para um valor dispatcher não está disponível em um modo de exibição de tempo de design. Isso poderá causar problemas se você tiver criado um controle personalizado que usa valores dispatcher e esse código for acessado por um ambiente de tempo de design por meio de caminhos de código que uma exibição de design usa, como construtores e manipuladores Carregados . Se você estiver escrevendo um controle personalizado e encontrar esse problema, considere introduzir uma proteção condicional em seu código, como não chamar esse código quando DesignModeEnabled for true.