假设我在Page_1中,同时单击按钮必须导航到Page_2。在Page_2中,必须进行Api调用。
MyIssue是当我单击按钮时,它不会立即导航到Page_2,而是等待API响应。
如何在不等待APi响应的情况下立即导航到Page_2。
代码:
Page_1.cs
public partial class Page_1 : ContentPage
{
public Page_1()
{
InitializeComponent();
}
private void Btn_click(object sender, EventArgs e)
{
Navigation.PushAsync(new Page_2());
}
}
第2页:
public Page_2()
{
InitializeComponent();
}
protected override void OnAppearing()
{
HttpClient httpClient = new HttpClient();
var obj = httpClient.GetAsync("//Api//").Result;
if (obj.IsSuccessStatusCode)
{
}
}
相同的代码可以在iOS中按预期运行
答案 0 :(得分:1)
您可以将数据加载到其他任务中,以防止阻塞UI。
protected override void OnAppearing()
{
Task.Run( () => LoadData());
base.OnAppearing();
}
private async void LoadData()
{
HttpClient httpClient = new HttpClient();
var obj = await httpClient.GetAsync("//Api//");
if (obj.IsSuccessStatusCode)
{
// If you need to set properties on the view be sure to use MainThread
// otherwise you won't see it on the view.
Device.BeginInvokeOnMainThread(() => Name = "your text";);
}
}
答案 1 :(得分:0)
根据您的问题,您要在Page构造函数上调用API,这就是为什么要花时间加载Web API然后在page2上导航的原因。如果要在加载api之前在page2上导航。检查以下代码
public partial class Page2 : ContentPage
{
bool IsLoading{ get; set; }
public Page2()
{
InitializeComponent();
IsLoading = false;
}
protected async override void OnAppearing()
{
base.OnAppearing();
if (!IsLoading)
{
IsLoading=true
**Call the Web API Method Here**
}
IsLoading=false
}
}