导航到xamarin形式的下一页

时间:2018-08-09 13:14:01

标签: c# xamarin xamarin.forms

假设我在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中按预期运行

2 个答案:

答案 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
            }


         }