私はXamarin Formsアプリケーションを開発していますが、私の質問はXamarin固有のものではないと思います。 ユーザーがピンコードを入力した後(もちろん、ピンが正しい場合のみ)、私は彼にタブ付きのページを表示します。これらのページにはいくつかのコントロールがありますが、もっと重要なことは、それぞれが非同期呼び出しを使用してWebからデータを取得する必要があることです。さて、私のアプリケーションはいくつかのタブを持っているので、それぞれのデータをすべて並列に(非連続的に)取り出したいと思っています。私がこれまで実施してきたもの、これは次のとおりです。アプリケーションデータをバックグラウンドで準備する方法は?
public MainTabbedPage(bool requirePin)
{
if (requirePin)
{
Navigation.PushModalAsync(new PinEntryPage(this));
}
InitializeComponent();
}
public void InitializeChildren()
{
try
{
var page1 = new Page1();
page1.RefreshData();
var page2 = new Page2();
page2.RefreshButtons();
page2.RefreshData();
var page3 = new Page3();
page3.RefreshData();
Children.Add(page1);
Children.Add(page2);
Children.Add(page3);
}
catch (Exception ex)
{
// some error handling...
}
}
このようなすべてのRefreshData()
とRefreshButtons()
見ながら:それが正しいかどう今
public void RefreshData()
{
Task.Run(
() =>
{
var data = ApiSingleton.Instance.GetData().Result;
// some data manipulations
Device.BeginInvokeOnMainThread(() => /* some UI manipulation*/);
}
});
}
、これは右やっているように見える一方で、私は疑問に思いますそれをする方法、そうでない場合は、何ですか?
'GetData()'はタスクのようです。したがって、 'RefreshData'を非同期にした後、彼の結果を待つことができます。 'Task.Run()'の必要はありませんimo – lokusking
'GetData()'は非同期メソッドのように見えます(なぜなら 'Result'に触れるからです)。 –
本当にありがとう、非同期です。私は 'Device.BeginInvokeOnMainThread'を必要としないでしょうか? – nicks