ジオスペースマップが埋め込まれたプログラムがあります。マップのイベント処理は、マップの応答性を維持するために別のスレッドで処理されます(たとえば、マップがクリックされたときに発生するイベント)。
私が抱えている問題は、マップがイベントを発生させたときに、プログラムがGUI内のいくつかのものを更新し、マップに写真を配置するためにマップにコールバックする必要があることです。
イベントハンドラーメソッド全体をthis.Dispatcher.Invokeでラップしてみました。これにより、メインUIスレッドに戻ります。これはGUIの更新には最適ですが、マップにコールバックしても、まだUIスレッドを使用しているため、マップに問題が発生する可能性があります。
基本的に、これを機能させるには、GUIのコントロールを変更するたびにdispatcher.invokeを実行する必要があります。各呼び出しをdispatcher.invokeでラップせずに、これを自動的に実行できる方法はありますか?これがすべて理にかなっていることを願っています。
これが私が話しているイベントのサンプルコードです。
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
}