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");
}
}
}
}
任何帮助都很感谢,如果你对我的代码有任何提示或改进,请评论他们,谢谢
当您指出它"不工作"时,您实际上在说什么?
你是说你收到了"位置当前不可用"的消息吗?如果是这样,这可能是因为设备中的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");
}
}
}