我有一个使用Bing Maps控件的Silverlight应用程序。地图视图停止更改时加载数据。我看到an example有人使用控件的ASP.Net版本并且能够实现这一点。 Silverlight中同样可能吗?
Microsoft.Maps.Events.addThrottledHandler(map, 'viewchangeend', UpdatePOIData, 250);
答案 0 :(得分:2)
最简单的方法是使用调度程序创建自己的限制类,该调度程序将初始调用等待x秒,然后检查自执行操作之前是否已进入另一个调用。
抱歉,我手边没有任何代码
答案 1 :(得分:1)
您可以使用Reactive Extensions执行此操作。为此目的存在Throttle
方法:
var observable =
Observable.FromEventPattern<MapEventArgs>(
handler => map.ViewChangeEnd += handler,
handler => map.ViewChangeEnd -= handler);
observable.Throttle(TimeSpan.FromSeconds(1))
.Subscribe(ev => map_ViewChangeEnd(ev.Sender, ev.EventArgs));
...
void map_ViewChangeEnd(object sender, MapEventArgs e)
{
...
}
(未测试的)
答案 2 :(得分:1)
要解决使用此代码时遇到的Invalid cross-thread access ( UnauthorizedAccessExcecption) while using Subscribe function
错误。
使用以下内容:
using System.Reactive.Concurrency;
using System.Reactive.Linq;
var observable = Observable.FromEventPattern<MapEventArgs>(
handler => MyMap.ViewChangeEnd += handler,
handler => MyMap.ViewChangeEnd -= handler);
observable.Throttle(TimeSpan.FromSeconds(2)).ObserveOn(DispatcherScheduler.Current).Subscribe(ev => MyMap_ViewChangeEnd(ev.Sender, ev.EventArgs));
您必须添加ObserveOn(DispatcherScheduler.Current)
才能使其正常运行。并添加System.Reactive.Core
,System.Reactive.Interfaces
,System.Reactive.Linq
和System.Reactive.Windows.Threading
的参考文献。