WP7 Popup在与位置一起使用时会延迟打开

时间:2011-03-02 19:45:03

标签: c# windows-phone-7 popup geolocation

我有以下代码:

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 个答案:

答案 0 :(得分:2)

看起来你在TryStart期间阻止了UI线程。如果你可以将观察者初始化移动到后台线程(例如移动到线程池),那么你可以保持显示“活着”。

类似的东西:

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.");
        }
    });
});