Member 13459382 Ответов: 1

Geocoordinatewarcher location дает неизвестное значение долготы


У меня есть приложение формы C#, в котором таймер устанавливается на каждую 1 секунду.

Внутри этого я хочу проверить местоположение моего устройства. Код выглядит следующим образом:
Вот как называется таймер

этот.Time1SecTimer = новая система.Окна.Формы.Таймер(это.компоненты);
этот.Time1SecTimer.Интервал = 1000;
этот.Time1SecTimer.ТИК += новая система.EventHandler(это.Time1SecTimer_Tick);
Time1SecTimer.Включен = истина;

//Метод Time1SecTimer_Tick
private void Time1SecTimer_Tick(object sender, EventArgs e) //Time1SecTimer Tick Event (every 1 sec)
       {
           double longitude = GetLongLatValue();
           this.LongitudeValueLabel.Text = longitude.ToString();
       }


//Метод GetLongLatValue
public double GetLongLatValue()
        {
            GeoCoordinateWatcher watcher = new GeoCoordinateWatcher();

            GeoCoordinate coord = watcher.Position.Location;
            return coord.Longitude;

        }


Можно ли что-нибудь изменить здесь для правильного значения долготы?

Что я уже пробовал:

Я попытался изменить метод GetLongLatValue следующим образом, но это не сработало
GeoCoordinateWatcher watcher = new GeoCoordinateWatcher();
            watcher.TryStart(false, // Do not suppress permissions prompt.
            TimeSpan.FromMilliseconds(1000)); // Wait 1000 ms to start.

            GeoCoordinate coord = watcher.Position.Location;

1 Ответов

Рейтинг:
10

Dave Kreskowiak

Вы создаете новый GeoCoordinateWatcher на каждом ТИКе таймера. НЕ ДЕЛАЙ ЭТОГО!

У вас только один экземпляр. Итак, создайте переменную уровня класса для хранения GeoCoordinateWatcher и используйте ее для получения координат на каждом ТИКе таймера:

public partial class Form1 : Form
{
    GeoCoordinateWatcher geo = null;

    public Form1()
    {
        InitializeComponent();
    }

    private void StartButton_Click(object sender, EventArgs e)
    {
        geo = new GeoCoordinateWatcher();

        geo.TryStart(false, TimeSpan.FromSeconds(3));

        if (geo.Status == GeoPositionStatus.Ready)
        {
            timer1.Interval = 1000;
            timer1.Start();
        }
    }

    private void Timer1_Tick(object sender, EventArgs e)
    {
        GeoCoordinate coord = geo.Position.Location;

        Log(coord.ToString());
    }

    private void Log(string message)
    {
        LogListBox.Items.Add(message);
    }
}

Когда ваша форма закроется, не забудьте вызвать Dispose() для наблюдателя. Я не показал этого в Примере.


Member 13459382

Привет Дэйв,

Спасибо за ваш ответ. Я попробовал это сделать. Теперь проблема, с которой я сталкиваюсь, заключается в том, что статус всегда дает NoData.

Знаете ли вы причину этого?

Member 13459382

Я совершила какую-то ошибку. Теперь исправил. Это работает. Спасибо за ответ. Это было действительно полезно.

[no name]

именно то, что я искал, мило