Bonne manière d'obtenir le CoreDispatcher dans une application Windows Store
Je suis en train de construire une application du Windows Store, et j'ai un code qui doit être posté sur le thread d'INTERFACE utilisateur.
Pour cela, j'aimerais récupérer le CoreDispatcher et de l'utiliser pour poster le code.
Il semble que il ya quelques façons de le faire:
//First way
Windows.ApplicationModel.Core.CoreApplication.GetCurrentView().CoreWindow.Dispatcher;
//Second way
Window.Current.Dispatcher;
Je me demande laquelle est la bonne? ou si les deux sont équivalents?
- Les deux sont des sortes de raison, mais il sera nulle si vous n'êtes pas accéder à partir de quelque chose qui a déjà accès à l'expéditeur. Si vous voulez l'utiliser, disons, d'un ViewModel ou le Contrôleur, alors vous aurez besoin pour stocker hors du Répartiteur, généralement comme une Propriété statique dans votre Application.xaml.cs ou CIO contrôleur, et de définir à partir de la première page que vous avez la charge.
Vous devez vous connecter pour publier un commentaire.
C'est la meilleure façon:
L'avantage c'est que ça devient le principal
CoreApplicationView
et est donc toujours disponible. Plus de détails ici.Il y a deux alternatives que vous pourriez utiliser.
Première alternative
Cela devient la fenêtre active de l'application, mais cela vous donnera null, si aucun point de vue n'a pas été activé. Plus de détails ici.
Deuxième alternative
Cette solution ne fonctionne pas lorsqu'il est appelé à partir d'un autre thread car il renvoie null au lieu de la de l'INTERFACE utilisateur Répartiteur. Plus de détails ici.
Pour toute personne à l'aide de C++/CX
En fait, je voudrais proposer quelque chose dans la ligne de ce:
De cette façon, si vous avez ouvert un autre point de Vue/de la Fenêtre, vous n'obtiendrez pas les Répartiteurs confus...
Ce petit bijou vérifie si il y a même une Fenêtre. Si aucun, utilisez le MainView du Répartiteur. Si il est un point de vue, utiliser un Répartiteur.