PositionChanged& StatusChanged事件在WP7中被触发两次

时间:2013-01-22 06:48:39

标签: windows-phone-7 gps windows-mobile-gps

我正试图在GPS的帮助下获取坐标,当我正在进行干运行或调试时,事件使得PositionChange& StatusChange调用TWICE。这是我的代码,请帮助我。

  private void button1_Click(object sender, RoutedEventArgs e)
    {
        if (NetworkInterface.GetIsNetworkAvailable())
        {
            flag = true;
            if (watcher == null)
            {
                watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);
                watcher.MovementThreshold = 20;
                watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
                watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
                watcher.Start();
            }
        }

    }


 void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
    {
        switch (e.Status)
        {
            case GeoPositionStatus.Disabled:
                MessageBox.Show("Location Service is not enabled on the device");
                break;

            case GeoPositionStatus.NoData:
                MessageBox.Show(" The Location Service is working, but it cannot get location data.");
                break;
        }
    }

  void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
    {
        if (e.Position.Location.IsUnknown)
        {
            MessageBox.Show("Please wait while your prosition is determined....");
            return;
        }

        List<string> locationData = new List<string>();
        locationData.Add(e.Position.Location.Latitude.ToString("Latitude:" + "0.000"));
        locationData.Add(e.Position.Location.Longitude.ToString("Longitude:" + "0.000"));
        locationData.Add(e.Position.Location.Altitude.ToString());
        locationData.Add(e.Position.Location.Speed.ToString());
        locationData.Add(e.Position.Location.Course.ToString());
}

1 个答案:

答案 0 :(得分:1)

它被调用两次,因为状态从

变化

初始化 - &gt;就绪

对于初始化它会触发一次并准备第二次:)