WP7 Popup задерживает открытие при использовании с локациями - PullRequest
1 голос
/ 02 марта 2011

У меня есть следующий код:

ShowPoup(); 
if (_watcher == null)
{
    _watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
    _watcher.MovementThreshold = 15; // use MovementThreshold to ignore noise in the signal
    _watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
}

if (!_watcher.TryStart(true, TimeSpan.FromSeconds(3)))
{
    MessageBox.Show("Please turn on location services on device under Settings.");
    //HidePopup();
}

Моя проблема в том, что всплывающее окно не появляется до тех пор, пока не вернется метод _watcher.TryStart (). Смысл всплывающего окна - показать наложение загрузки, чтобы сообщить пользователю, что приложение что-то делает. Бессмысленно показывать его после завершения работы, после чего я скрываю всплывающее окно, поэтому пользователь никогда ничего не видит.

У меня есть этот всплывающий код в приложении, и я впервые столкнулся с этой проблемой. Даже если я вызову ShowPopup () в отдельном методе перед вызовом текущего метода, он все равно не будет отображаться до запуска _watcher. Я не уверен, почему это происходит.

1 Ответ

2 голосов
/ 02 марта 2011

Похоже, вы блокируете поток пользовательского интерфейса во время TryStart. Если вы можете переместить инициализацию наблюдателя в фоновый поток (например, в пул потоков), вы можете сохранить отображение «живым».

Что-то вроде:

ShowPoup(); 
if (_watcher == null)
{
    _watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
    _watcher.MovementThreshold = 15; // use MovementThreshold to ignore noise in the signal
    _watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
}

System.Threading.ThreadPool.QueueUserWorkItem((ignored) =>
{
    if (!_watcher.TryStart(true, TimeSpan.FromSeconds(3)))
    {
        Dispatcher.BeginInvoke(() =>
        {
            HidePopup();
            MessageBox.Show("Please turn on location services on device under Settings.");
        }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...