Recherche…


Manipulation de l'interface utilisateur à partir de threads d'arrière-plan

Les threads d'arrière-plan ne peuvent pas modifier l'interface utilisateur. presque toutes les méthodes UIKit doivent être appelées sur le thread principal.

A partir d'une sous-classe de NSObject (y compris UIViewController ou UIView ):

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

A partir d'une classe C # standard:

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

InvokeOnMainThread attend l' InvokeOnMainThread de votre code sur le thread principal avant de continuer. Si vous n'avez pas besoin d'attendre, utilisez BeginInvokeOnMainThread .

Utiliser Async et attendre

Vous pouvez utiliser des méthodes asynchrones pour gérer les exécutions asynchrones. Par exemple, requêtes POST et GET. Laissez dire ci-dessous est votre méthode d'acquisition de données.

Task<List> GetDataFromServer(int type);

Vous pouvez appeler cette méthode comme indiqué ci-dessous

var result = await GetDataFromServer(1);

Cependant, dans la pratique, cette méthode sera dans une interface de couche de service. Le meilleur moyen d'y parvenir est de créer une méthode distincte pour appeler ceci et mettre à jour l'interface utilisateur illustrée ci-dessous.

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

Dans l'extrait de code ci-dessus, la méthode GetDataListFromServer sera appelée et enverra la requête Web. Néanmoins, il ne bloquera pas le thread d'interface utilisateur tant qu'il n'aura pas reçu la réponse du serveur. Il va descendre la ligne après await GetDataListFromServer(1) . Cependant, dans la méthode private async Task GetArchivedListFromServer(int type) , il attendra qu'il obtienne la réponse du serveur pour exécuter les lignes après que var result = await GetDataFromServer(type); .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow