C# GPS类事件在其他类中的使用

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

我有一个适用于WindowsPhone7的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;
        }

    }
公共类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位置。