2011-03-02 86 views
1

用來當打開我有以下代碼:WP7彈出延遲與位置

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啓動之後才顯示。我不知道爲什麼會發生這種情況。

回答

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

實際上,該代碼需要另一個HidePopup()用於當trystart成功 - 但我希望你的想法! – Stuart 2011-03-02 20:46:31

+0

謝謝,這是有效的。 – CACuzcatlan 2011-03-02 21:12:59