¿Cómo dormir hilo en Xamarin android y ios?

Estoy construyendo una aplicación para iOS y Android usando Xamarin plataforma cruzada. Tengo un proyecto llamado "Core", y luego uno para iOS y otro para Android.

En el proyecto "Core" compartido quiero mostrar una animación de carga que hice, mientras buscaba la ubicación actual desde el dispositivo. Puedo obtener mi locationWatcher, iniciarlo y llamar a LocationWatcher.CurrentPosition directamente, pero como acaba de empezar a buscar las actualizaciones de ubicación, todavía no ha tenido tiempo de obtener ninguna ubicación.

Mi solución a esto es esperar 2 segundos después de iniciarlo y luego obtener la ubicación. Sin embargo, no quiero esperar asincronamente, quiero que la interfaz de usuario se bloquee mientras espera. Esto se debe a que el usuario no debe poder hacer nada hasta que se conozca la posición actual.

Actualmente logro esto por tener un bucle:

DateTime startTime = DateTime.Now(); while ( (DateTime.Now() - startTime).TotalMilliseconds() < 2000) { //Locking the UI here, but it's what I want so it's ok. } 

Esto parece un feo "hack" para algo que en Java sería simplemente "Thread.sleep (2000)"

¿Hay una mejor manera de hacer esto?

La forma multiplataforma con Xamarin Forms sería

 await Task.Delay(ms); 

Editar:

Después de leer que realmente desea bloquear el mainthread heres la forma multiplataforma para bloquear un hilo:

 Task.Delay(ms).Wait() 

Bloquear el subproceso de la interfaz de usuario es una mala práctica, ya que entre otras cosas podría hacer que el dispositivo marque la aplicación como "no responde". Tampoco está garantizado que la posición se haya determinado en dos segundos, así que en el mejor de los casos su sugerencia es sólo una solución parcial.

Lo que realmente querrás hacer es bloquear la entrada de la interfaz de usuario deshabilitando la posibilidad de dar entrada (debería haber métodos para deshabilitar los elementos de la interfaz de usuario) y luego ver si hay una devolución de llamada del servicio de geolocalización cuando ha determinado tu ubicación. En la devolución de llamada, vuelva a habilitar los elementos de la interfaz de usuario. Si no existe dicha devolución de llamada, realice la búsqueda de ubicación de forma síncrona en el subproceso de interfaz de usuario con RunOnUIThread / InvokeOnMainThread, de modo que el subproceso sólo se bloquea hasta que se devuelve.

Si desea seguir adelante con su solución de todos modos,

 RunOnUiThread(() => Thread.Sleep(2000)); 

Debe hacer el truco, pero realmente recomiendo en contra de hacer eso. En iOS, tendrás que hacer

 InvokeOnMainThread(() => Thread.Sleep(2000)); 
  • Obtener la actividad actual de Application.Context - MonoAndroid
  • Java.IO.ISerializable Xamarin
  • ¿Cómo puedo usar el cliente ServiceStack con Xamarin.Android Licencia Indie
  • Actualización de Xamarin hace que "el archivo de clase tenga versión incorrecta 52.0, debe ser 50.0" error
  • SDK de Android instalado, pero adb.exe ausente
  • Cómo reducir el tamaño de código de usuario para una aplicación Xamarin Forms en Visual Studio 2015?
  • Uso del depurador de Microsoft con Xamarin Android
  • Cómo ocultar las pestañas de Android utilizando Xamarin Formulario renderizador personalizado?
  • El código funciona en Xamarin Android pero no funciona en Java (HttpPost JSON)
  • Cómo cerrar la actividad de Android con visual studio y xamarin
  • Botón de acción flotante en Xamarin.Forms
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.