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); .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow