我将多视图作为子项添加到循环中的stacklayout。页面仅在添加所有子项后呈现。我想展示添加的孩子和正在添加的孩子的装载标志。
我在做,如下所示,
for(int i= 0; i<30;i++){
myStackLayout.Children.Add(myView);
}
如何使其异步。
答案 0 :(得分:1)
最简单的方法是运行您的内容/视图创建&#34;在后台线程上,然后当您需要将该内容/视图添加到UI时,将其添加到主/ UI线程(BeginInvokeOnMainThread)。
Task.Run(async () =>
{
var itemsAdded = await AddContentAsync();
});
注意:我们&#34;显示&#34; CREATING CONTENT
标签,然后我们创建20个按钮并在主/ UI线程上一次添加一个按钮,并在添加内容时滚动到新内容,一旦内容完成,我们滚动回到顶部并且&#34;隐藏&#34; CREATING CONTENT
标签。
Task<int> AddContentAsync()
{
Device.BeginInvokeOnMainThread(() =>
{
topLayout.RaiseChild(loading);
loading.IsVisible = true;
});
int itemsAdded = 0;
for (itemsAdded = 1; itemsAdded < 21; itemsAdded++)
{
// Create your dynamic content view....
var newContentView = new Button
{
Text = itemsAdded.ToString(),
HorizontalOptions = LayoutOptions.CenterAndExpand
};
Device.BeginInvokeOnMainThread(() =>
{
dynamicStackLayout.Children.Add(newContentView);
(dynamicStackLayout.Parent as ScrollView)?.ScrollToAsync(newContentView, ScrollToPosition.End, true);
});
}
Device.BeginInvokeOnMainThread(() =>
{
(dynamicStackLayout.Parent as ScrollView)?.ScrollToAsync(0, 0, true);
loading.IsVisible = false;
topLayout.RaiseChild(scrollView);
});
return itemsAdded;
}