gpt4 book ai didi

c# - 在不中断 UI 的情况下每 3 秒重新加载 GridView

转载 作者:行者123 更新时间:2023-11-30 22:56:55 26 4
gpt4 key购买 nike

我有一个问题。

我创建了一个带有一些按钮和一个 GridView 的 Android 页面。现在 GridView 中充满了来 self 网站的 json,我想每 3 秒重新加载一次 GridView,不会减慢应用程序!!!所以我尝试了这个:

在 Page1 加载无效:RunOnUiThread(() => LoadOrdersAsync());

还有函数:

public async Task LoadOrdersAsync()
{
while (true)
{
//Creating SortedList

if (OrderListAdapter == null)
{

//Fill the DataSource of the ListView with the Array of Names
OrderListAdapter = new OrderListAdapter(this, SortedOrderList);
GridviewOrders.Adapter = OrderListAdapter;
}
else
{
OrderListAdapter.refresh(SortedOrderList);
}

// don't run again for at least 3 seconds
await Task.Delay(3000);
}
}

问题是所有内容都已填充,但 UI 滞后,因为该线程。我该如何解决这个问题?

最佳答案

您不能在不中断 ui 的情况下刷新您的 GridView ,因为刷新 GridView 必须在 ui 线程上完成。

如果应用程序运行缓慢,那么您希望一次用太多数据填充您的 GridView ,这样需要时间来呈现所有行。

你的解决方案是准备一些分页机制,我的意思是,只加载可见的数据量+更多的数据,当用户试图向下滚动并且他试图滚动多于可用行时,然后将另一行添加到你的gridview 并在用户向下滚动时一遍又一遍地执行此操作。

我过去遇到过常见问题,我正在编写 xamarin 表单应用程序,并且我有一个包含 100 000 条记录的列表。如果您一次加载所有内容,您将挂起几秒钟,所以我想出了分页,并在需要时填充更多内容,这非常好。

您可以为用户体验添加一些忙碌指示器。

编辑 1:

首先,正如其他人已经提到的,您只需要使用 ui 线程来更新控件中的数据。我提到过分页机制(但你还没有说你期望的行数),但首先检查下面的代码,如果你仍然有问题,那么你需要进行分页。您可以尝试仅使用 20 个元素更新您的列表,以测试它是否有帮助。

//page1 load
private void Load()
{
LoadOrdersAsync();
}

private async Task LoadOrdersAsync()
{
while (true)
{
//Creating SortedList
var SortedOrderList = //add your logic

RunOnUiThread( ()=>
{
if (OrderListAdapter == null)
{

//Fill the DataSource of the ListView with the Array of Names
OrderListAdapter = new OrderListAdapter(this, SortedOrderList);
GridviewOrders.Adapter = OrderListAdapter;
}
else
{
OrderListAdapter.refresh(SortedOrderList);
}
});

// don't run again for at least 3 seconds
await Task.Delay(3000);
}
}

关于c# - 在不中断 UI 的情况下每 3 秒重新加载 GridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53960731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com