Ho un programma con una mappa Geospace incorporata in esso. La gestione degli eventi per la mappa viene gestita su un thread separato per mantenere la mappa reattiva (ad esempio, gli eventi che si attivano quando si fa clic sulla mappa).C#, WPF, chiama automaticamente Dispatcher.Invoke quando necessario?
Il problema che sto avendo è quando la mappa attiva un evento, il mio programma ha bisogno di aggiornare alcune cose nel suo gui, e anche richiamare sulla mappa per gestire l'inserimento delle immagini sulla mappa.
Ho provato a racchiudere l'intero metodo del gestore di eventi in this.Dispatcher.Invoke, che mi riporta al thread dell'interfaccia utente principale. Funziona perfettamente per l'aggiornamento della GUI, ma quando richiamo la mappa, sono ancora sul thread dell'interfaccia utente che può causare alcuni problemi nella mappa.
Fondamentalmente, per fare questo lavoro, dovrò eseguire dispatcher.invoke ogni volta che voglio cambiare un controllo sul mio gui. C'è un modo in cui posso farlo automaticamente senza includere ogni chiamata in dispatcher.invoke? Spero che tutto ciò abbia un senso.
Ecco qualche esempio di codice per l'evento di cui sto parlando ..
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
}