DependencyObject.Dispatcher Propriété
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Obtient le CoreDispatcher auquel cet objet est associé. CoreDispatcher représente une installation qui peut accéder à DependencyObject sur le thread d’interface utilisateur, même si le code est initié par un thread autre que l’interface utilisateur.
public:
property CoreDispatcher ^ Dispatcher { CoreDispatcher ^ get(); };
CoreDispatcher Dispatcher();
public CoreDispatcher Dispatcher { get; }
var coreDispatcher = dependencyObject.dispatcher;
Public ReadOnly Property Dispatcher As CoreDispatcher
CoreDispatcher auquel l’objet DependencyObject est associé, qui représente le thread d’interface utilisateur.
Cet exemple montre une utilisation de Dispatcher pour la valeur implicite d’un fichier code-behind pour une page. Cet exemple utilise une expression lambda pour ajouter l’implémentation DispatchedHandler . Le gestionnaire lui-même gère l’événement Accelerometer.ReadingChanged , qui ne sera pas exécuté sur le thread d’interface utilisateur.
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);
});
}
La propriété Dispatcher fournit la référence CoreDispatcher qui peut être utilisée pour marshaler les appels provenant de threads autres que l’interface utilisateur, à l’aide de RunAsync et d’une fonction awaitable. Pour plus d’informations sur les fonctions pouvant être attendues, consultez Appeler des API asynchrones en C# ou Visual Basic. Consultez également la section « DependencyObject and threading » de la rubrique de référence DependencyObject .
Un DependencyObject doit être créé sur un thread d’interface utilisateur et a une affinité avec le thread d’interface utilisateur. Étant donné qu’il s’agit d’un point d’entrée qui permet d’obtenir plusieurs threads, DependencyObject.Dispatcher est la seule api instance de DependencyObject ou de l’une de ses sous-classes accessibles à partir d’un thread autre que l’interface utilisateur sans lever d’exception entre les threads. Toutes les autres API DependencyObject lèvent une exception si vous tentez de les appeler à partir d’un thread worker ou d’un autre thread autre que l’interface utilisateur.
Plus précisément, la propriété Dispatcher obtient le CoreDispatcher associé au thread d’interface utilisateur de l’application. L’exécution du code via la méthode RunAsync de CoreDispatcher est nécessaire si vous envisagez d’interroger ou de modifier la valeur d’une propriété de dépendance, même si cet objet n’est pas encore associé à l’arborescence visuelle XAML ou à l’interface utilisateur visible (racine visuelle de la fenêtre d’application).
Window.Dispatcher fait également référence à un CoreDispatcher associé au thread d’interface utilisateur. Window.Dispatcher n’est fondamentalement qu’un wrapper autour de CoreWindow.Dispatcher afin qu’une classe Window y ait facilement accès.
Notes
La connexion d’une valeur Dispatcher n’est pas disponible dans un affichage au moment de la conception. Cela peut entraîner des problèmes si vous avez créé un contrôle personnalisé qui utilise des valeurs dispatcher et que ce code est accessible par un environnement au moment du design via des chemins de code qu’un mode conception utilise, tels que les constructeurs et les gestionnaires chargés . Si vous écrivez un contrôle personnalisé et que vous rencontrez ce problème, envisagez d’introduire une protection conditionnelle dans votre code, par exemple, de ne pas appeler ce code lorsque DesignModeEnabled est vrai.