我有一个 GPS 类,我显然用它来获取纬度和经度。
当 GPS 状态或位置发生变化时调用 UpdateData()。所以我确保纬度和经度都是有效的,然后我使 DataReady 布尔等于 true。
因此,我以相当 n00b 的方式使用此代码,其中我使用计时器(Windows 窗体的)并每 10 秒检查一次 getGPSCoordinates() 以查看是否找到有效位置(getGPSCoordinates() 不为空),如果没有,请执行其余代码。这是使用的,因为可能需要 10 秒到甚至 1 分钟才能获得清晰的 gps 信号。
所以虽然这很好用,但我知道这不是正确的方法。我认为整个 GPS 业务应该在一个单独的线程上进行,它应该通知主线程位置已更改并且数据已准备好。
有人能指出我处理这类业务的正确方法吗?我应该IAsyncResult
用来通知主线程吗?
bool DataReady = false;
private void UpdateData()
{
if (gps.Opened)
{
if (position != null)
{
if (position.LatitudeValid)
{
Latitude = position.Latitude.ToString();
}
if (position.LongitudeValid)
{
Longitude = position.Longitude.ToString();
}
if (Latitude != null && Longitude != null)
DataReady = true;
}
}
public string getGPSCoordinates()
{
if (DataReady)
{
return String.Format("http://maps.google.com/maps/api/staticmap?sensor=false&size=500x500&markers=color:red|label:A|{0},{1}&zoom=15&maptype=hybrid", Latitude, Longitude);
}
else
return null;
}
}