Bonne façon d'obtenir le CoreDispatcher dans une application Windows Store
je suis en train de construire une application Windows Store, et j'ai un code qui doit être posté sur le thread de L'interface utilisateur.
pour ça, j'aimerais récupérer le régulateur de vitesse et l'utiliser pour afficher le code.
il semble qu'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 correcte? ou si les deux sont équivalents?
4 réponses
C'est la méthode préférée:
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
// Your UI update code goes here!
});
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 pouvez utiliser.
première alternative
Windows.ApplicationModel.Core.CoreApplication.GetCurrentView().CoreWindow.Dispatcher
cela obtient la vue active pour l'application, mais cela vous donnera null , si aucune vue n'a été activée. Plus de détails ici .
deuxième variante
Window.Current.Dispatcher
Cette solution ne fonctionnera pas quand elle est appelée à partir d'un autre thread car elle retourne null au lieu du UCI Dispatcher . Plus de détails ici .
pour toute personne utilisant C++ / CX
Windows::ApplicationModel::Core::CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(
CoreDispatcherPriority::Normal,
ref new Windows::UI::Core::DispatchedHandler([this]()
{
// do stuff
}));
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
() => { // your code should be here});
en fait, je proposerais quelque chose dans la ligne de ceci:
return (Window.Current == null) ?
CoreApplication.MainView.CoreWindow.Dispatcher :
CoreApplication.GetCurrentView().CoreWindow.Dispatcher
de cette façon, si vous avez ouvert une autre vue/fenêtre, vous n'obtiendrez pas les répartiteurs confus...
ce petit bijou vérifie s'il y a même une fenêtre. Si aucun, utilisez le répartiteur de MainView. S'il y a une vue, utilisez son répartiteur.