Ich habe ein Programm mit einer eingebetteten Geospace-Map. Die Ereignisbehandlung für die Karte wird in einem separaten Thread behandelt, um die Reaktion der Karte zu steuern (z. B. die Ereignisse, die beim Klicken auf die Karte ausgelöst werden).C#, WPF, Dispatcher automatisch anrufen. Bei Bedarf anrufen?
Das Problem, das ich habe, ist, wenn die Karte ein Ereignis auslöst, mein Programm einige Dinge in seiner GUI aktualisieren muss, und auch zurück in die Karte rufen, um Bilder auf der Karte zu platzieren.
Ich habe versucht, die gesamte Event-Handler-Methode in this.Dispatcher.Invoke zu verpacken, was mich wieder in den Haupt-UI-Thread versetzt. Dies funktioniert hervorragend zum Aktualisieren meiner GUI, aber wenn ich in die Map zurückrufe, bin ich immer noch im UI-Thread, was einige Probleme in der Map verursachen kann.
Grundsätzlich, um diese Arbeit zu machen, muss ich Dispatcher.invoke jedes Mal, wenn ich ein Steuerelement auf meinem GUI ändern möchten. Gibt es eine Möglichkeit, dies automatisch zu tun, ohne jeden Anruf in dispatcher.invoke einzuwickeln? Ich hoffe, das macht alles Sinn.
Heres einig Beispiel-Code für den Fall, ich rede ..
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
}