我有一个用于Windows Phone 7的GPS类,我是从MSDN中获取的。
public class GetGPS : GeoCoordinateWatcher
{
GeoCoordinateWatcher watcher;
public float longitude { get; set; }
public GetGPS()
{
watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
watcher.MovementThreshold = 20.0;
watcher.PositionChanged += watcher_PositionChanged;
watcher.StatusChanged += this.watcher_StatusChanged;
watcher.Start();
}
public void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
{
switch (e.Status)
{
case GeoPositionStatus.Initializing:
break;
case GeoPositionStatus.Ready:
//plingpling
break;
case GeoPositionStatus.Disabled:
// location is unsupported on this device
break;
case GeoPositionStatus.NoData:
//pling
break;
}
}
public void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
Debug.WriteLine(String.Format("***POSITION: {0}, {1}", e.Position.Location.Latitude, e.Position.Location.Longitude));
Helfer.myLocation = e.Position.Location;
}
}
当我尝试在我的程序中使用这个类时,我从来没有得到我的实际位置 - 在程序运行一段时间后我得到了那个位置 - 我想我可以让异步执行对此负责。 / p>
然而,当我在需要gps的类中直接实现GetGPS构造函数(并在该类中定义观察者......)时,我得到了我想要的东西 - 但是因为我必须得到一些GPS位置我的程序中的部分我认为最好将该功能外包给一个类(DRY-Principle)。
如何在实现 - 或观察StatusChanged和PositionChanged对象的类“test”中创建GetGPS实例?
如果我可以在该类中创建一个事件监听器......我可以得到我想要的功能:)。
答案 0 :(得分:1)
如果您期望GPS位置在应用程序执行期间频繁更改,并且您需要实时更新,我会做的只是向您的班级添加名为CurrentLocation
的公共属性,并设置其PositionChanged
事件中的值。然后,您保留对GetGPS
类的实例的全局引用,并且当您需要访问该位置时,使用CurrentLocation
属性。