Xamarin.iOS
Gelijktijdig programmeren in Xamarin.iOS
Zoeken…
UI manipuleren vanuit achtergrondthreads
Achtergrondthreads kunnen de gebruikersinterface niet wijzigen; bijna alle UIKit-methoden moeten op de hoofdthread worden aangeroepen.
Van een subklasse van NSObject
(inclusief elke UIViewController
of UIView
):
InvokeOnMainThread(() =>
{
// Call UI methods here
});
Uit een standaard C # -klasse:
UIApplication.SharedApplication.InvokeOnMainThread(() =>
{
// Call UI methods here
});
InvokeOnMainThread
wacht tot uw code op de InvokeOnMainThread
uitgevoerd voordat u doorgaat. Als u niet hoeft te wachten, gebruikt u BeginInvokeOnMainThread
.
Async gebruiken en wachten
U kunt asynchrone methoden gebruiken om asynchrone uitvoeringen af te handelen. Bijvoorbeeld POST- en GET-aanvragen. Laten we hieronder zeggen dat je je gegevensmethode krijgt.
Task<List> GetDataFromServer(int type);
U kunt die methode aanroepen zoals hieronder wordt weergegeven
var result = await GetDataFromServer(1);
In de praktijk zal deze methode zich echter in een servicelaaginterface bevinden. De beste manier om dat te doen is om een aparte methode te maken om dit aan te roepen en de hieronder getoonde gebruikersinterface bij te werken.
//Calling from viewDidLoad
void async ViewDidLoad()
{
await GetDataListFromServer(1);
//Do Something else
}
//New method call to handle the async task
private async Task GetArchivedListFromServer(int type)
{
var result = await GetDataFromServer(type);
DataList.AddRange(result.toList());
tableView.ReloadData();
}
In het bovenstaande codefragment wordt de methode GetDataListFromServer aangeroepen en wordt de webaanvraag verzonden. Desondanks zal het de UI-thread niet blokkeren totdat het antwoord van de server wordt ontvangen. Het wordt langs de regel verplaatst na await GetDataListFromServer(1)
. Binnen de private async Task GetArchivedListFromServer(int type)
methode, wacht het echter totdat het antwoord van de server wordt ontvangen om de regels uit te voeren na var result = await GetDataFromServer(type);
.