У меня есть класс GPS, который я, очевидно, использую для получения широт и долгот.Помогите решить эту проблему Threading с помощью GPS
UpdateData() вызывается, когда состояние или местоположение gps изменяется. Поэтому я удостоверяюсь, что и Широта и Долгота действительны, и затем я делаю DataReady bool равным true.
Я использую этот код довольно n00b, когда я использую таймер (один из форм Windows Form) и проверяю getGPSCoordinates() каждые 10 секунд, чтобы узнать, найдено ли действительное местоположение (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;
}
}
В этой записи MSDN есть очень похожая идея: http://msdn.microsoft.com/en-us/library/dd990377.aspx –
К сожалению, это поддерживается в .NET Framework 4. Я настраиваю таргетинг .NET Compact Framework 3.5 –
Конечно, не заметил этого. Однако, чтобы маршалировать что-то обратно на конкретный поток, thead должен опросить очередь или что-то (подумайте, что Message Pump в WinForms). Если вы вернетесь к пользовательскому интерфейсу, это будет возможно. –