Ricerca…


Manipolazione dell'interfaccia utente dai thread in background

I thread in background non possono modificare l'interfaccia utente; quasi tutti i metodi UIKit devono essere richiamati sul thread principale.

Da una sottoclasse di NSObject (incluso qualsiasi UIViewController o UIView ):

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

Da una classe C # standard:

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

InvokeOnMainThread attende il codice in esecuzione sul thread principale da eseguire prima di continuare. Se non è necessario attendere, utilizzare BeginInvokeOnMainThread .

Usare Async e attendere

È possibile utilizzare i metodi asincroni per gestire le esecuzioni asincrone. Ad esempio le richieste POST e GET. Diciamo che sotto è il metodo di acquisizione dei dati.

Task<List> GetDataFromServer(int type);

Puoi chiamare quel metodo come mostrato di seguito

var result = await GetDataFromServer(1);

Tuttavia, nella pratica del giorno reale questo metodo sarà in un'interfaccia del livello di servizio. Lì il modo migliore per farlo è creare un metodo separato per chiamare questo e aggiornare l'interfaccia utente mostrata di seguito.

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

Nello snippet di codice precedente, il metodo GetDataListFromServer verrà chiamato e invierà la richiesta web. Tuttavia, non bloccherà il thread dell'interfaccia utente finché non riceverà la risposta dal server. Si sposterà lungo la linea dopo aver await GetDataListFromServer(1) . Tuttavia, all'interno del metodo private async Task GetArchivedListFromServer(int type) , attenderà fino a quando non ottiene la risposta dal server per eseguire le righe dopo var result = await GetDataFromServer(type); .



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow