DependencyObject.Dispatcher Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene el CoreDispatcher al que está asociado este objeto. CoreDispatcher representa una instalación que puede acceder a DependencyObject en el subproceso de la interfaz de usuario, incluso si un subproceso que no es de interfaz de usuario inicia el código.
public:
property CoreDispatcher ^ Dispatcher { CoreDispatcher ^ get(); };
CoreDispatcher Dispatcher();
public CoreDispatcher Dispatcher { get; }
var coreDispatcher = dependencyObject.dispatcher;
Public ReadOnly Property Dispatcher As CoreDispatcher
Valor de propiedad
CoreDispatcher al que está asociado el objeto DependencyObject, que representa el subproceso de la interfaz de usuario.
Ejemplos
En este ejemplo se muestra un uso de Dispatcher para el implícito de un archivo de código subyacente para una página. En este ejemplo se usa una expresión lambda para agregar la implementación dispatchedHandler . El propio controlador controla el evento Accelerometer.ReadingChanged , que no se ejecutará en el subproceso de la interfaz de usuario.
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);
});
}
Comentarios
La propiedad Dispatcher proporciona la referencia de CoreDispatcher que se puede usar para serializar las llamadas procedentes de subprocesos que no son de interfaz de usuario, mediante RunAsync y una función awaitable. Para obtener más información sobre las funciones que se pueden esperar, consulte Llamada a api asincrónicas en C# o Visual Basic. Vea también la sección "DependencyObject y subproceso" del tema de referencia DependencyObject .
Se debe crear un dependencyObject en un subproceso de interfaz de usuario y tener afinidad con el subproceso de la interfaz de usuario. Dado que es un punto de entrada que permite obtener entre subprocesos, DependencyObject.Dispatcher es la única API de instancia de DependencyObject o cualquiera de sus subclases a las que se puede acceder desde un subproceso que no es de interfaz de usuario sin iniciar una excepción entre subprocesos. Todas las demás API dependencyObject inician una excepción si intenta llamarlas desde un subproceso de trabajo u otro subproceso que no es de interfaz de usuario.
En concreto, la propiedad Dispatcher obtiene el CoreDispatcher asociado al subproceso de la interfaz de usuario de la aplicación. Es necesario ejecutar código a través del método RunAsync de CoreDispatcher si tiene previsto consultar o cambiar el valor de cualquier propiedad de dependencia, incluso si ese objeto aún no está asociado al árbol visual XAML o a la interfaz de usuario visible (la raíz visual de la ventana de la aplicación).
Window.Dispatcher también hace referencia a un CoreDispatcher asociado al subproceso de interfaz de usuario. Window.Dispatcher es básicamente solo un contenedor alrededor de CoreWindow.Dispatcher para que una clase Window tenga fácil acceso a ella.
Nota
La conexión de un valor dispatcher no está disponible en una vista en tiempo de diseño. Esto puede causar problemas si ha creado un control personalizado que usa valores de Dispatcher y a ese código se accede mediante un entorno en tiempo de diseño a través de rutas de acceso de código que usa una vista de diseño, como constructores y controladores cargados . Si está escribiendo un control personalizado y encuentra este problema, considere la posibilidad de introducir un condicional de protección en el código, como no llamar a ese código cuando DesignModeEnabled sea true.