У меня есть класс GPS, который я, очевидно, использую для определения широты и долготы.
UpdateData () вызывается при изменении состояния или местоположения gps. Поэтому я проверяю, что широта и долгота действительны, а затем я делаю DataReady bool равным true.
Таким образом, я использую этот код довольно n00b способом, где я использую Timer (Windows Form) и проверяю getGPSCoordinates () каждые 10 секунд, чтобы увидеть, найдено ли правильное местоположение (getGPSCoordinates () не является нулевым) и если нет , сделайте остальной код. Это используется, поскольку для получения четкого сигнала GPS может потребоваться от 10 секунд до, возможно, даже 1 минуты.
Так что, хотя это работает нормально, я знаю, что это неправильный способ сделать это. Я думаю, что весь бизнес 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;
}
}