Tengo un programa con un mapa de Geospace incrustado en él. El manejo de eventos para el mapa se maneja en un hilo separado para mantener el mapa sensible (por ejemplo, los eventos que se disparan cuando se hace clic en el mapa).C#, WPF, llama automáticamente a Dispatcher. ¿Invoca cuando es necesario?
El problema que tengo es cuando el mapa dispara un evento, mi programa necesita actualizar algunas cosas en su interfaz gráfica de usuario, y también vuelve a llamar al mapa para manejar la colocación de imágenes en el mapa.
Intenté envolver todo el método del controlador de eventos en this.Dispatcher.Invoke, lo que me devuelve al hilo principal de la IU. Esto funciona muy bien para actualizar mi GUI, pero cuando vuelvo a llamar al mapa, todavía estoy en el hilo de UI que puede causar algunos problemas en el mapa.
Básicamente, para que esto funcione, voy a tener que ejecutar dispatcher.invoke cada vez que quiero cambiar un control en mi interfaz gráfica de usuario. ¿Hay alguna manera de que pueda hacer esto automáticamente sin envolver cada llamada en dispatcher.invoke? Espero que todo esto tenga sentido.
Heres un código de ejemplo para el evento que estoy hablando ..
private void Map_OnMapClicked(object sender, MapClickedEventArgs e)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
{
// Do something to update my gui
}));
Map.DoSomethingInTheMap();
this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
{
// Do something to update my gui
}));
//etc etc etc
}