You're creating a new GeoCoordinateWatcher on every timer tick. DO NOT DO THAT!
You only one instance. So, create a class-level variable to hold the GeoCoordinateWatcher and use that to get the coordinate on every timer tick:
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);
}
}
When your form closes, remember to call Dispose() on the watcher. I did not show that in the example.