我有一个 Singleton 类 LocationManager,它处理我的 Windows Metro 应用程序中的所有地理位置。
因为来自 Geolocator 对象的 .PositionChanged 事件通常在后台线程上引发,所以我想将我的类传递给 CoreDispatcher 的引用,以便它可以在 UI 线程上自动引发自己的事件。例如:
public class LocationManager
{
// Events
public event EventHandler<LocationUpdatedEventArgs> LocationUpdated = delegate { };
// Private members
Geolocator gl = null;
CoreDispatcher dispatcher = null;
public void StartUpdating(CoreDispatcher dispatcher)
{
this.dispatcher = dispatcher;
gl = new Geolocator();
gl.PositionChanged += gl_PositionChanged;
}
async void gl_PositionChanged(Geolocator sender, PositionChangedEventArgs args)
{
// Ensure this class's event is raised on UI thread
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
LocationUpdated(this, new LocationUpdatedEventArgs(args.Position));
}
);
}
我想知道我是否应该将 dispatcher.RunAsync 的东西放在我的每个监听 UI 对象中(即 MainPage.xaml.cs)——但这种方法似乎可以节省代码的重复。这种方法有什么缺点吗?例如,对调度程序的引用是否会变得陈旧或无效?