Suche…


Manipulieren der Benutzeroberfläche von Hintergrundthreads

Hintergrund-Threads können die Benutzeroberfläche nicht ändern. Fast alle UIKit-Methoden müssen im Hauptthread aufgerufen werden.

Aus einer Unterklasse von NSObject (einschließlich UIViewController oder UIView ):

InvokeOnMainThread(() =>
{
    // Call UI methods here
});

Aus einer Standardklasse C #:

UIApplication.SharedApplication.InvokeOnMainThread(() =>
{
    // Call UI methods here
});

InvokeOnMainThread wartet, bis der Code im Hauptthread ausgeführt wird, bevor Sie fortfahren. Wenn Sie nicht warten müssen, verwenden Sie BeginInvokeOnMainThread .

Async verwenden und warten

Sie können asynchrone Methoden verwenden, um asynchrone Ausführungen auszuführen. Zum Beispiel POST- und GET-Anfragen. Nehmen wir an, Sie erhalten Ihre Datenmethode unten.

Task<List> GetDataFromServer(int type);

Sie können diese Methode wie unten gezeigt aufrufen

var result = await GetDataFromServer(1);

In der Praxis wird diese Methode jedoch in einer Service-Layer-Schnittstelle sein. Am besten erstellen Sie hierfür eine separate Methode, um diese aufzurufen und die unten gezeigte Benutzeroberfläche zu aktualisieren.

//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();
}

Im obigen Code-Snippet wird die GetDataListFromServer-Methode aufgerufen und die Webanforderung wird gesendet. Trotzdem wird der UI-Thread nicht blockiert, bis er die Antwort vom Server erhält. Nach dem await GetDataListFromServer(1) wird die Zeile nach unten await GetDataListFromServer(1) . Innerhalb der private async Task GetArchivedListFromServer(int type) -Methode wartet sie jedoch, bis sie die Antwort vom Server erhält, um die Zeilen nach var result = await GetDataFromServer(type); auszuführen var result = await GetDataFromServer(type); .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow