Sto costruendo un'applicazione per iOS e Android utilizzando la piattaforma cross Xamarin. Ho un progetto chiamato "Core", e poi uno per iOS e uno per Android.Come dormire thread in Xamarin Android e iOS?
Nel progetto "Core" condiviso voglio mostrare un'animazione di caricamento che ho creato, mentre recupera la posizione corrente dal dispositivo. Posso ottenere la mia posizione Watcher, avviarla e chiamare LocationWatcher.CurrentPosition direttamente, ma dal momento che ha appena iniziato a guardare gli aggiornamenti di posizione, non ha ancora avuto il tempo di ottenere alcuna posizione.
La mia soluzione è attendere 2 secondi dopo averlo avviato e ottenere la posizione. Comunque non voglio aspettare in modo asincrono, voglio che l'interfaccia utente sia bloccata mentre aspetto. Questo perché l'utente non dovrebbe essere in grado di fare nulla fino a quando non si conosce la posizione corrente.
Io attualmente a raggiungere questo avendo un ciclo:
DateTime startTime = DateTime.Now();
while ((DateTime.Now() - startTime).TotalMilliseconds() < 2000) {
//Locking the UI here, but it's what I want so it's ok.
}
Questo mi sembra un brutto 'Hack' per qualcosa che in Java sarebbe semplicemente "Thread.sleep (2000)"
C'è un modo migliore di farlo?
Entrambe le risposte funzionano, ma come indicato in una pubblicazione, è davvero una cattiva pratica ** Per bloccare il thread principale dell'interfaccia utente, ricordare che il blocco dell'interfaccia utente in eccesso può far terminare l'app dal sistema operativo e persino causare il mancato invio dell'app. IMO, metti un thumper sullo schermo e fai una chiamata asincrona ... – SushiHangover
Ottimi commenti, proverò a non bloccare il thread principale dell'interfaccia utente perché lo stavo facendo principalmente perché non riuscivo a far funzionare correttamente l'animazione di caricamento, quindi gli utenti stavano facendo clic selvaggiamente mentre avrebbero dovuto aspettare solo i risultati. Proverò a farlo funzionare con "attendi Task.Delay (ms)". – JavaDevSweden