tienda - que aplicaciones se pueden hacer con c#
Forma correcta de obtener CoreDispatcher en una aplicaciĆ³n de la Tienda Windows (4)
En realidad, propondría algo en la línea de esto:
return (Window.Current == null) ?
CoreApplication.MainView.CoreWindow.Dispatcher :
CoreApplication.GetCurrentView().CoreWindow.Dispatcher
De esa manera, si abrieras otra Vista / Ventana, no conseguirás que los Despachadores se confundan ...
Esta pequeña gema verifica si hay incluso una ventana. Si no tiene ninguno, use el Despachador de MainView. Si hay una vista, use ese Dispatcher.
Estoy construyendo una aplicación de Windows Store, y tengo un código que debe ser publicado en el hilo de la interfaz de usuario.
Para eso, me gustaría recuperar el CoreDispatcher y usarlo para publicar el código.
Parece que hay algunas formas de hacerlo:
// First way
Windows.ApplicationModel.Core.CoreApplication.GetCurrentView().CoreWindow.Dispatcher;
// Second way
Window.Current.Dispatcher;
Me pregunto cuál es correcto? o si ambos son equivalentes?
Esta es la forma preferida:
Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
// Your UI update code goes here!
});
La ventaja de esto es que obtiene el CoreApplicationView
principal y siempre está disponible. Más detalles here .
Hay dos alternativas que puedes usar.
Primera alternativa
Windows.ApplicationModel.Core.CoreApplication.GetCurrentView().CoreWindow.Dispatcher
Esto obtiene la vista activa para la aplicación, pero esto le dará nulo , si no se ha activado ninguna vista. Más detalles here .
Segunda alternativa
Window.Current.Dispatcher
Esta solución no funcionará cuando se invoque desde otro hilo ya que devuelve null en lugar de UI Dispatcher . Más detalles here .
Para cualquiera que use 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});