使用GPS课程其他课程的活动

时间:2011-01-14 16:11:20

标签: c# windows-phone-7

我有一个用于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实例?

如果我可以在该类中创建一个事件监听器......我可以得到我想要的功能:)。

1 个答案:

答案 0 :(得分:1)

如果您期望GPS位置在应用程序执行期间频繁更改,并且您需要实时更新,我会做的只是向您的班级添加名为CurrentLocation的公共属性,并设置其PositionChanged事件中的值。然后,您保留对GetGPS类的实例的全局引用,并且当您需要访问该位置时,使用CurrentLocation属性。