【发布时间】:2016-02-22 17:50:42
【问题描述】:
我正在使用 Xamarin 跨平台构建适用于 iOS 和 Android 的应用程序。我有一个名为“Core”的项目,然后是一个用于 iOS 和一个用于 Android。
在共享的“核心”项目中,我想展示我制作的加载动画,同时从设备中获取当前位置。我可以获取我的 locationWatcher,启动它,然后直接调用 LocationWatcher.CurrentPosition,但由于它刚刚开始监视位置更新,它还没有时间获取任何位置。
我对此的解决方案是在启动后等待 2 秒,然后获取位置。但是我不想异步等待,我希望在等待时锁定 UI。这是因为用户在知道当前位置之前不能做任何事情。
我目前通过循环来实现这一点:
DateTime startTime = DateTime.Now();
while ( (DateTime.Now() - startTime).TotalMilliseconds() < 2000) {
//Locking the UI here, but it's what I want so it's ok.
}
这似乎是一个丑陋的“黑客”,因为在 Java 中只是“Thread.sleep(2000)”
有更好的方法吗?
【问题讨论】:
-
两个答案都有效,但正如一个帖子所说,阻塞主 UI 线程是一种非常糟糕的做法,记住过多的 UI 阻塞会使应用程序被操作系统终止甚至导致它无法提交应用程序。 IMO,在屏幕上放一个重击器并进行异步调用...
-
很棒的 cmets,我会尽量不阻塞主 UI 线程,因为我大部分时间都在这样做,因为我无法让加载动画正常工作,所以用户在他们应该点击的时候疯狂地点击真的一直在等待结果。我将尝试使用“await Task.Delay(ms)”来完成这项工作。
标签: android ios datetime xamarin sleep