我有一个嵌入了地理空间地图的程序。地图的事件处理在单独的线程上处理以保持地图响应(例如,单击地图时触发的事件)。
我遇到的问题是当地图触发一个事件时,我的程序需要更新它的 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
}