C# GeoCoordinateWatcher偶尔只工作一次
以下代码试图获取运行代码的计算机的位置:C# GeoCoordinateWatcher偶尔只工作一次,c#,wpf,location,C#,Wpf,Location,以下代码试图获取运行代码的计算机的位置: GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High); if (watcher.TryStart(false, TimeSpan.FromMilliseconds(3000))) { GeoCoordinate coord = watcher.Position.Location; if (!coord.IsUnknown)
GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
if (watcher.TryStart(false, TimeSpan.FromMilliseconds(3000)))
{
GeoCoordinate coord = watcher.Position.Location;
if (!coord.IsUnknown)
{
Printer.Print(String.Format("Current Lat: {0}, Current Long: {1}", coord.Latitude, coord.Longitude));
}
else // Path taken most often
{
throw new CommandException("Weather data unknown. (Are location services enabled?)");
}
}
else
{
throw new CommandException("Weather data unknown. (Are location services enabled?)");
}
每隔一段时间,会打印正确的位置,但大多数情况下,会运行注释的else语句。经过多次测试,我意识到它是否有效完全是随机的。我做错了吗?您遇到问题的原因可能是您正在初始化一个新的定位器,但没有等待状态在检查位置之前报告它已准备就绪
bool abort = false;
GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
if (watcher.TryStart(false, TimeSpan.FromMilliseconds(3000)))
{
DateTime start = DateTime.Now;
while(watcher.Status != GeoPositionStatus.Ready && !abort)
{
Thread.Sleep(200);
if(DateTime.Now.Subtract(start).TotalSeconds > 5)
abort = true;
}
GeoCoordinate coord = watcher.Position.Location;
if (!coord.IsUnknown)
{
Printer.Print(String.Format("Current Lat: {0}, Current Long: {1}", coord.Latitude, coord.Longitude));
}
else // Path taken most often
{
throw new CommandException("Weather data unknown. (Are location services enabled?)");
}
}
else
{
throw new CommandException("Weather data unknown. (Are location services enabled?)");
}
基本上,这会添加一个检查,以查看状态是否已就绪,并等待长达5秒
或者,通常应在模块级别设置观察者,并注册
位置更改
事件,以便仅在位置实际更改时更新打印输出,而不是一个轮询循环,它会在静止状态下一次又一次地重复当前位置。您遇到问题的原因可能是您正在初始化一个新的定位器,而不是在检查位置之前等待状态报告它已准备就绪
bool abort = false;
GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
if (watcher.TryStart(false, TimeSpan.FromMilliseconds(3000)))
{
DateTime start = DateTime.Now;
while(watcher.Status != GeoPositionStatus.Ready && !abort)
{
Thread.Sleep(200);
if(DateTime.Now.Subtract(start).TotalSeconds > 5)
abort = true;
}
GeoCoordinate coord = watcher.Position.Location;
if (!coord.IsUnknown)
{
Printer.Print(String.Format("Current Lat: {0}, Current Long: {1}", coord.Latitude, coord.Longitude));
}
else // Path taken most often
{
throw new CommandException("Weather data unknown. (Are location services enabled?)");
}
}
else
{
throw new CommandException("Weather data unknown. (Are location services enabled?)");
}
基本上,这会添加一个检查,以查看状态是否已就绪,并等待长达5秒
或者,通常应在模块级别设置观察者,并注册
位置更改
事件,以便仅在位置实际更改时更新打印输出,而不是一个轮询循环,它会在静止时反复重申当前位置。当它工作时,coord
的值是多少?什么时候没有?是否启用位置服务?电脑是否使用wifi/3G/其他功能?它有GPS吗?@mjwills当它工作时,coord
的值与我的位置是正确的。否则,值为{Unknown}
。启用定位服务;我能想到的所有使用定位的东西都是有用的。我的电脑不是笔记本电脑,而是无线网络。Idk关于GPS。当它工作时,coord
的值是多少?什么时候没有?是否启用位置服务?电脑是否使用wifi/3G/其他功能?它有GPS吗?@mjwills当它工作时,coord
的值与我的位置是正确的。否则,值为{Unknown}
。启用定位服务;我能想到的所有使用定位的东西都是有用的。我的电脑不是笔记本电脑,而是无线网络。Idk关于全球定位系统。