サーチ…


バックグラウンドスレッドからUIを操作する

バックグラウンドスレッドはUIを変更できません。ほとんどすべてのUIKitメソッドは、メインスレッド上で呼び出さなければなりません。

NSObjectUIViewControllerまたはUIViewを含む)のサブクラスから:

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

標準のC#クラスから:

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

InvokeOnMainThreadは、メインスレッド上で実行中のコードが実行されるのを待ってから実行を続けます。待機する必要がない場合は、 BeginInvokeOnMainThread使用しBeginInvokeOnMainThread

非同期と待機を使用する

非同期メソッドを使用して、非同期実行を処理できます。例えば、POST要求とGET要求。あなたのgetデータメソッドは以下のようになります。

Task<List> GetDataFromServer(int type);

以下のようにそのメソッドを呼び出すことができます

var result = await GetDataFromServer(1);

しかし、実際の練習では、このメソッドはサービスレイヤインターフェイスになります。これを行う最善の方法は、これを呼び出して下に示すUIを更新する別のメソッドを作成することです。

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

上記のコードスニペットでは、GetDataListFromServerメソッドが呼び出され、Webリクエストが送信されます。それにもかかわらず、サーバーからの応答を得るまでUIスレッドをブロックしません。それはawait GetDataListFromServer(1)てからラインを下に移動します。しかし、 private async Task GetArchivedListFromServer(int type)メソッドの中では、 var result = await GetDataFromServer(type);後に行を実行するためにサーバからの応答を取得するまで待機しますvar result = await GetDataFromServer(type);



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow