GeoCoordinateWatcher 类  
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供基于纬度和经度坐标的位置数据。
public ref class GeoCoordinateWatcher : IDisposable, System::ComponentModel::INotifyPropertyChanged, System::Device::Location::IGeoPositionWatcher<System::Device::Location::GeoCoordinate ^>[System.Security.SecurityCritical]
public class GeoCoordinateWatcher : IDisposable, System.ComponentModel.INotifyPropertyChanged, System.Device.Location.IGeoPositionWatcher<System.Device.Location.GeoCoordinate>[<System.Security.SecurityCritical>]
type GeoCoordinateWatcher = class
    interface IDisposable
    interface INotifyPropertyChanged
    interface IGeoPositionWatcher<GeoCoordinate>Public Class GeoCoordinateWatcher
Implements IDisposable, IGeoPositionWatcher(Of GeoCoordinate), INotifyPropertyChanged- 继承
- 
				GeoCoordinateWatcher
- 属性
- 实现
示例
以下程序演示如何创建 GeoCoordinateWatcher 并使用初始化超时开始获取数据。 然后,代码将打印位置的坐标(如果已知)。
using System;
using System.Device.Location;
namespace GetLocationProperty
{
    class Program
    {
        static void Main(string[] args)
        {
            GetLocationProperty();
        }
        static void GetLocationProperty()
        {
            GeoCoordinateWatcher watcher = new GeoCoordinateWatcher();
            // Do not suppress prompt, and wait 1000 milliseconds to start.
            watcher.TryStart(false, TimeSpan.FromMilliseconds(1000));
            GeoCoordinate coord = watcher.Position.Location;
            if (coord.IsUnknown != true)
            {
                Console.WriteLine("Lat: {0}, Long: {1}",
                    coord.Latitude,
                    coord.Longitude);
            }
            else
            {
                Console.WriteLine("Unknown latitude and longitude.");
            }
        }
    }
}
Imports System.Device.Location
Module GetLocationProperty
    Public Sub GetLocationProperty()
        Dim watcher As New System.Device.Location.GeoCoordinateWatcher()
        watcher.TryStart(False, TimeSpan.FromMilliseconds(1000))
        Dim coord As GeoCoordinate = watcher.Position.Location
        If coord.IsUnknown <> True Then
            Console.WriteLine("Lat: {0}, Long: {1}", coord.Latitude, coord.Longitude)
        Else
            Console.WriteLine("Unknown latitude and longitude.")
        End If
    End Sub
    Public Sub Main()
        GetLocationProperty()
        Console.ReadLine()
    End Sub
End Module
以下程序演示如何通过订阅 PositionChanged 事件来接收连续的位置更新。
using System;
using System.Device.Location;
namespace GetLocationEvent
{
    class AsyncProgram
    {
        static void Main(string[] args)
        {
            CLocation myLocation = new CLocation();
            myLocation.GetLocationEvent();
            Console.WriteLine("Enter any key to quit.");
            Console.ReadLine();
        }
        class CLocation
        {
            GeoCoordinateWatcher watcher;
            public void GetLocationEvent()
            {
                this.watcher = new GeoCoordinateWatcher();
                this.watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
                bool started = this.watcher.TryStart(false, TimeSpan.FromMilliseconds(2000));
                if (!started)
                {
                    Console.WriteLine("GeoCoordinateWatcher timed out on start.");
                }
            }
            void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
            {
                PrintPosition(e.Position.Location.Latitude, e.Position.Location.Longitude);
            }
            void PrintPosition(double Latitude, double Longitude)
            {
                Console.WriteLine("Latitude: {0}, Longitude {1}", Latitude, Longitude);
            }
        }
    }
}
Imports System.Device.Location
Module GetLocationEvent
    Public Class CLocation
        Private WithEvents watcher As GeoCoordinateWatcher
        Public Sub GetLocationEvent()
            watcher = New System.Device.Location.GeoCoordinateWatcher()
            AddHandler watcher.PositionChanged, AddressOf watcher_PositionChanged
            Dim started As Boolean = watcher.TryStart(False, TimeSpan.FromMilliseconds(1000))
            If Not started Then
                Console.WriteLine("GeoCoordinateWatcher timed out on start.")
            End If
        End Sub
        Private Sub watcher_PositionChanged(ByVal sender As Object, ByVal e As GeoPositionChangedEventArgs(Of GeoCoordinate))
            PrintPosition(e.Position.Location.Latitude, e.Position.Location.Longitude)
        End Sub
        Private Sub PrintPosition(ByVal Latitude As Double, ByVal Longitude As Double)
            Console.WriteLine("Latitude: {0}, Longitude {1}", Latitude, Longitude)
        End Sub
    End Class
    Public Sub Main()
        Dim myLocation As New CLocation()
        myLocation.GetLocationEvent()
        Console.WriteLine("Enter any key to quit.")
        Console.ReadLine()
    End Sub
End Module
注解
类 GeoCoordinateWatcher 从当前位置提供程序提供基于坐标的位置数据。 根据许多因素(例如,来自所有提供程序的数据的年龄和准确性、位置应用程序请求的准确性以及与位置提供程序关联的功耗和性能影响),将当前位置提供程序确定为计算机上最高的位置提供程序。 当前位置提供程序可能会随时间而改变,例如,当 GPS 设备在室内丢失其卫星信号,而 Wi-Fi 三角测量提供程序成为计算机上最准确的提供程序时。
若要开始访问位置数据,请 GeoCoordinateWatcher 创建 并调用 Start 或 TryStart 以启动从当前位置提供程序获取数据。
Status可以检查 属性以确定数据是否可用。 如果数据可用,可以从 属性获取一次 Position 位置,或通过处理 PositionChanged 事件接收连续的位置更新。
Permission、 Status和 Position 属性支持 INotifyPropertyChanged,以便应用程序可以将数据绑定到这些属性。
在 Windows 7 中 System.Device.Location ,如果安装了位置提供程序并且能够解析计算机的位置,则所有类都完全正常运行。
注意
在 Windows 7 简易版 Edition 上,唯一支持的位置提供程序是 控制面板 中的默认位置提供程序,并且必须安装加载项才能指定纬度和经度。
注意 在 Windows 7 之前的 Windows 版本中,以下条件适用:
- 可以创建具有构造函数的所有 System.Device.Location 对象,但 Status 属性将始终具有值 Disabled。 
- 不会引发任何位置事件。 
构造函数
| GeoCoordinateWatcher() | 使用默认精度设置初始化 GeoCoordinateWatcher 类的新实例。 | 
| GeoCoordinateWatcher(GeoPositionAccuracy) | 使用给定的精度级别初始化 GeoCoordinateWatcher 类的新实例。 | 
属性
| DesiredAccuracy | 由 GeoCoordinateWatcher 提供的位置数据所需的精度级别。 | 
| MovementThreshold | 相对于最后一个 PositionChanged 事件中的坐标必须移动的距离(以米为单位),移动该距离之后位置提供程序将引发另一个 PositionChanged 事件。 | 
| Permission | 指示访问来自位置提供程序的位置数据的权限是已授予还是已拒绝。 | 
| Position | 获取指示当前位置的 GeoCoordinate。 | 
| Status | 获取 GeoCoordinateWatcher 的当前状态。 | 
方法
| Dispose() | 释放由 GeoCoordinateWatcher 类的当前实例占用的所有资源。 | 
| Dispose(Boolean) | 释放 GeoCoordinateWatcher 类的当前实例所使用的所有资源。 | 
| Equals(Object) | 确定指定对象是否等于当前对象。(继承自 Object) | 
| Finalize() | 在通过垃圾回收回收 GeoCoordinateWatcher 之前,释放资源并执行其他清理操作。 | 
| GetHashCode() | 作为默认哈希函数。(继承自 Object) | 
| GetType() | 获取当前实例的 Type。(继承自 Object) | 
| MemberwiseClone() | 创建当前 Object 的浅表副本。(继承自 Object) | 
| OnPositionChanged(GeoPositionChangedEventArgs<GeoCoordinate>) | 在 PositionChanged 事件发生时调用。 | 
| OnPositionStatusChanged(GeoPositionStatusChangedEventArgs) | 在 StatusChanged 事件发生时调用。 | 
| OnPropertyChanged(String) | 当 GeoCoordinateWatcher 的某个属性更改时调用。 | 
| Start() | 开始从当前位置提供程序获取数据。 此方法启用 PositionChanged 事件并允许访问 Position 属性。 | 
| Start(Boolean) | 开始从当前位置提供程序获取数据。 此方法启用 PositionChanged 事件并允许访问 Position 属性。 | 
| Stop() | 停止 GeoCoordinateWatcher 提供位置数据和事件。 | 
| ToString() | 返回表示当前对象的字符串。(继承自 Object) | 
| TryStart(Boolean, TimeSpan) | 开始从当前位置提供程序获取数据。 此方法同步返回。 | 
事件
| PositionChanged | 指示位置数据的纬度或经度已更改。 | 
| StatusChanged | 指示 GeoCoordinateWatcher 对象的状态已更改。 | 
显式接口实现
| IGeoPositionWatcher<GeoCoordinate>.PositionChanged | 指示位置数据已更改。 | 
| IGeoPositionWatcher<GeoCoordinate>.StatusChanged | 指示位置提供程序的状态已更改。 | 
| INotifyPropertyChanged.PropertyChanged | 指示 Status 属性、Position 属性或 Permission 属性已更改。 |