C# GPS类事件在其他类中的使用
我有一个适用于WindowsPhone7的GPS类,我从MSDN中获得了它C# GPS类事件在其他类中的使用,c#,windows-phone-7,C#,Windows Phone 7,我有一个适用于WindowsPhone7的GPS类,我从MSDN中获得了它 public class GetGPS : GeoCoordinateWatcher { GeoCoordinateWatcher watcher; public float longitude { get; set; } public GetGPS() { watcher = new GeoCoordinateWatche
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;
}
}
公共类GetGPS:GeoCoordinateWatcher
{
地球坐标观测员;
公共浮点经度{get;set;}
公共GetGPS()
{
watcher=新的地理坐标记录器(地理位置精度高);
watcher.MovementThreshold=20.0;
watcher.PositionChanged+=watcher\u PositionChanged;
watcher.StatusChanged+=this.watcher\u StatusChanged;
watcher.Start();
}
public void watcher_status已更改(对象发送方、地理位置状态更改Deventargs e)
{
开关(如状态)
{
案例地理位置状态。正在初始化:
打破
案例地理位置状态。准备就绪:
//plingpling
打破
案例地理位置状态。已禁用:
//此设备上不支持此位置
打破
案例地理位置status.NoData:
//扣环
打破
}
}
public void watcher_position已更改(对象发送器,地理位置更改Deventargs e)
{
WriteLine(String.Format(“***位置:{0},{1}”,e.POSITION.Location.Latitude,e.POSITION.Location.Longitude));
Helfer.myLocation=e.Position.Location;
}
}
当我尝试在我的程序中使用这个类时,我从来没有得到我的实际位置-我在程序运行一段时间后得到了这个位置-我想我可以让异步执行对此负责
然而,当我直接在我需要gps的类中实现GetGPS构造函数(并在该类中定义观察者…)时,我得到了我想要的-但是由于我必须在程序的某些部分中获得gps位置,我认为最好将该功能外包到一个类中(DRY原则)
如何在实现或观察StatusChanged和PositionChanged对象的类“test”中创建GetGPS实例
如果我能在那个类中创建一个事件侦听器。。。我可以得到我想要的功能:)。如果您希望GPS位置在应用程序执行期间会频繁更改,并且需要实时更新,那么我只需将名为
CurrentLocation
的公共属性添加到类中,并在PositionChanged
事件中设置其值。然后保留对GetGPS
类实例的全局引用,当需要访问位置时,使用CurrentLocation
属性。我假设这是代码的子集,因为没有定义Helfer.myLocation
。是的,一旦我有了GPS定位,Helfer.MyLocation是一个拐杖-它保持着地理位置。为什么GeoCoordinateWatcher中的GetGPS子类?重点是什么?我试图在需要gps位置的类中直接实现positionChanged和statusChanged方法。您看到的延迟实际上可能与MovementThreshold
设置为20米有关——使用watcher.MovementThreshold=0,您将获得更频繁的位置更新代码>。不过,您似乎仍然存在一些架构问题。但是,当我这样做时,我无法获得位置更改,而当有人已经在使用GPS位置的应用程序的某个部分时,就会发生位置更改。是的,您可以,因为PositionChanged
事件将继续更新Helfer.myLocation
,直到watcher.Stop();代码>被调用。因此,每次检查Helfer.myLocation
的值时,它都将是可用的最新GPS位置。