Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GeoCoordinateWatcher偶尔只工作一次_C#_Wpf_Location - Fatal编程技术网

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关于全球定位系统。