首页 文章

xamarin使用await / async形成更新UI

提问于
浏览
0

我正在使用Visual Studio for Mac编写一个非常基本的Xamarin Forms应用程序 . 此应用程序应与Android和iOS上的PCL一起使用 .

我在XAML文件上有一个空的TableView . 我想要做的是使用我将从Web服务获取的数据填充此TableView .

这是我的C#代码:

HttpClient client = new HttpClient();

public async Task<List<MyItem>> LoadData()
{
    try
    {
        var response = await client.GetAsync(new Uri("http://example.com/myservice.php"));
        if (response.IsSuccessStatusCode)
        {
            var content = await response.Content.ReadAsStringAsync();
            return JsonConvert.DeserializeObject<List<MyItem>>(content);
        }
    }
    catch (Exception)
    {
        return null;
    }

    return null;
}

async void Handle_Clicked(object sender, System.EventArgs e)
{
    activity_indicator.IsRunning = true;
    var data = await LoadData();
    activity_indicator.IsRunning = false;

    mylistview.Root.Clear();
    foreach (var item in data)
    {
        TableSection section = new TableSection() { Title = item.GroupTitle };
        foreach (var subitem in item.subitems)
        {
            var cell = new TextCell() { Text = subitem.Title };
            cell.Tapped += on_item_tapped;
            section.Add(cell);
        }
        mylistview.Root.Add(section);
    }
}

我是新手等待和异步编程 . 我曾经用iOS代表开发本机iOS应用程序 . 我听说线程无法更新UI:例如,我可以在LoadData()方法中进行一些UI更新吗?所以我想知道我的代码是否良好 . 它看起来很好,因为它的工作原理,但我想知道这样做是否是一件好事?

2 回答

  • -2

    我相信它

    Device.BeginInvokeOnMainThread(() =>
    {
    
    });
    
  • 2
    private void UpdateUI(Action action)
    {
         this.Invoke(new Action(action), null);
     }
    

    用法:UpdateUI(()=> lable1.Text =“已更新”);

相关问题