Threading - убедитесь, что нить заканчивается - PullRequest
0 голосов
/ 11 мая 2011

решено: http://msdn.microsoft.com/en-us/library/ff431782(v=VS.92).aspx

У меня есть следующий класс, который даст мне текущее местоположение в WP7:

public class Position
{
    private GeoCoordinateWatcher watcher = null;
    public GeoCoordinate CurrentLocation { get; set; }

    public Position()
    {
        ObtainCurrentLocation();
    }

    private void ObtainCurrentLocation()
    {
        watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);
        watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
        watcher.Start();
    }

    void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
    {
        //stop & clean up, we don't need it anymore
        watcher.Stop();
        watcher.Dispose();
        watcher = null;

        CurrentLocation = e.Position.Location;
    }

}

Я хочу использовать это, чтобы получить местоположение. Так что я делаю, чтобы создать его экземпляр. Как я могу убедиться, что при вызове свойства CurrentLocation местоположение будет получено?

Ответы [ 5 ]

4 голосов
/ 11 мая 2011

Прежде всего, я бы настоятельно рекомендовал избегать автоматического определения местоположения при создании экземпляра класса. Это усложняет много вещей. Во-вторых, я бы рекомендовал возвращать GeoCoordinate через метод. Скажем, у вас есть public GeoCoordinate GetCoordinate(), который вернет вам результат - используйте его таким образом. Это немного облегчит синхронное получение данных.

2 голосов
/ 11 мая 2011

Вы можете заставить свой класс Position реализовать INotifyPropertyChanged и повысить PropertyChanged , когда значение свойства CurrentLocation изменилось.

Код, который будет прослушивать, будет затем прослушиватьдля Position.PropertyChanged и действовать соответствующим образом при возникновении события.

1 голос
/ 11 мая 2011
1 голос
/ 11 мая 2011

У вас есть несколько вариантов:

  1. Блокировка, ожидающая разрешения CurrentLocation.Не самое лучшее решение, пользовательский интерфейс может зависнуть и т. Д.
  2. Реализация простого механизма обратного вызова
  3. Проверить состояние и выйти (т.е. вызвать его из цикла ожидания какого-либо рода)
0 голосов
/ 15 мая 2011

Я поражен тем, что люди не знают этого, сеть изобилует учебниками и текстами, и это одна из самых распространенных тем.

Вот хороший небольшой учебник: Silverlight для Windows Phone - учиться и практиковаться

И здесь, бесплатно можно получить от Microsoft Press, есть Программирование Чарльза Петцольда для Windows Phone 7

Удивительно, но хотя первая книга - не совсем понятный индонезийский парень, тощий текст на изуродованном английском языке, за ним легко следовать, и он содержит важные вещи, которых нет в Petzold - например, как использовать InputScope, как вы это получаете Приветственный список предлагаемых слов во время ввода в TextBox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...