Ich baue eine Anwendung für iOS und Android mit Xamarin Cross-Plattform. Ich habe ein Projekt namens "Core", und dann eins für iOS und eins für Android.Wie schlafen Thread in Xamarin Android und iOS?
Im freigegebenen "Core" -Projekt möchte ich eine Ladeanimation anzeigen, die ich gemacht habe, während ich den aktuellen Standort vom Gerät abgerufen habe. Ich kann meinen locationWatcher holen, ihn starten und LocationWatcher.CurrentPosition direkt aufrufen, aber da er gerade nach Standortaktualisierungen gesucht hat, hat er noch keine Zeit, einen Standort zu bekommen.
Meine Lösung ist, warten Sie 2 Sekunden nach dem Start und dann die Position zu bekommen. Ich möchte jedoch nicht asynchron warten. Ich möchte, dass die Benutzeroberfläche während des Wartens gesperrt wird. Dies liegt daran, dass der Benutzer nichts tun kann, bis die aktuelle Position bekannt ist.
Dies erreiche ich zur Zeit durch eine Schleife mit:
DateTime startTime = DateTime.Now();
while ((DateTime.Now() - startTime).TotalMilliseconds() < 2000) {
//Locking the UI here, but it's what I want so it's ok.
}
Dies scheint wie eine hässliche 'Hack' für etwas, das einfach in Java würde "Thread.sleep (2000)" sein
Gibt es ein besserer Weg dies zu tun?
Beide Antworten funktionieren, aber wie man gepostet, es ist eine wirklich ** schlechte ** Praktik Wenn Sie Ihren Haupt-UIhread blockieren möchten, können Sie sich daran erinnern, dass die Sperrung der Benutzeroberfläche dazu führen kann, dass die App vom Betriebssystem beendet wird und sogar die App-Übermittlung fehlschlägt. IMO, Setzen Sie einen Klopfer auf den Bildschirm und machen Sie einen asynchronen Anruf ... – SushiHangover
Tolle Kommentare, ich werde versuchen, den Haupt-UI-Thread nicht zu blockieren, da ich es hauptsächlich getan habe, weil ich die Ladeanimation nicht richtig funktionieren konnte, so Die Nutzer klickten wild weg, während sie eigentlich nur auf Ergebnisse warten mussten. Ich werde versuchen, das mit "await Task.Delay (ms)" zu arbeiten. – JavaDevSweden