与位置一起使用时 WP7 弹出窗口延迟打开

Posted

技术标签:

【中文标题】与位置一起使用时 WP7 弹出窗口延迟打开【英文标题】:WP7 Popup delays opening when used with locations 【发布时间】:2011-03-02 19:45:03 【问题描述】:

我有以下代码:

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】:

您似乎在 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.");
        
    );
);

【讨论】:

实际上,当 trystart 成功时,该代码需要另一个 HidePopup() - 但我希望你明白!

以上是关于与位置一起使用时 WP7 弹出窗口延迟打开的主要内容,如果未能解决你的问题,请参考以下文章

在点击位置打开弹窗

打开位置弹出窗口或应用程序被杀死时 GPS 图标消失

d3.js 隐藏不透明度的弹出窗口不能与指针事件一起正常工作

Leaflet JS Map:MouseOver 上的弹出窗口在不正确的位置打开

iOS Swift如何打开位置权限弹出窗口

单击标记野生动物园时弹出窗口未打开