我有以下代码:
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启动之后显示。我不确定为什么会这样。
答案 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.");
}
});
});