c#必须运行两次代码才能工作-地理定位器

本文关键字:代码 工作 -地 定位器 两次 运行 | 更新日期: 2023-09-27 17:52:40

我正在编写一些代码,当按下按钮时,它将输出您的GPS坐标。出于某种原因,它只工作时,我点击它两次或更多次。即使我等了一分钟,然后点击它,我也必须再次点击它才能工作,我不知道为什么。这是我的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Device.Location;
namespace Location
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        GetLocation();
    }
    static void GetLocation()
    {
        GeoCoordinateWatcher GEOWatcher = new GeoCoordinateWatcher();
        GEOWatcher.TryStart(false, TimeSpan.FromMilliseconds(1000));
        GeoCoordinate Coordinates = GEOWatcher.Position.Location;
        if (Coordinates.IsUnknown != true)
        {
            Console.WriteLine("Latitude: " + Coordinates.Latitude + ", Longitude: " + Coordinates.Longitude);
            Console.WriteLine("https://www.google.co.uk/#q=" + Coordinates.Latitude + "," + Coordinates.Longitude);
            GEOWatcher.Dispose();
        }
        else
        {
            Console.WriteLine("Location currently unavaliable");
        }
    }
}
}

任何帮助都很感谢,如果你对我的代码有任何提示或改进,请评论他们,谢谢

c#必须运行两次代码才能工作-地理定位器

当您指出它"不工作"时,您实际上在说什么?

你是说你收到了"位置当前不可用"的消息吗?如果是这样,这可能是因为设备中的GPS单元需要一些时间才能锁定卫星。

编辑下面解释我的评论:

GeoCoordinateWatcher将需要一些时间来锁定卫星并提供一致的结果。将GeoCoordinateWatcher移动到类本身(所以当按钮单击事件结束时它不会得到垃圾收集)将提供一些缓解,但它仍然不能在你启动应用程序时给你一个结果。

public partial class Form1 : Form
{
    GeoCoordinateWatcher GEOWatcher;
    public Form1()
    {
        InitializeComponent();
        // this will start the GeoCoordinateWatcher when the app starts
        GEOWatcher = new GeoCoordinateWatcher();
        GEOWatcher.TryStart(false, TimeSpan.FromMilliseconds(1000));
    }
    private void button1_Click(object sender, EventArgs e)
    {
        GetLocation();
    }
    static void GetLocation()
    {
        GeoCoordinate Coordinates = GEOWatcher.Position.Location;
        if (Coordinates.IsUnknown != true)
        {
            Console.WriteLine("Latitude: " + Coordinates.Latitude + ", Longitude: " + Coordinates.Longitude);
            Console.WriteLine("https://www.google.co.uk/#q=" + Coordinates.Latitude + "," + Coordinates.Longitude);
        }
        else
        {
            Console.WriteLine("Location currently unavaliable");
        }
    }
}