Самый простой способ - запустить «создание контента / представления» в фоновом потоке, а затем, когда вам нужно добавить это содержимое / представление в пользовательский интерфейс, добавить его в основной поток / поток пользовательского интерфейса (BeginInvokeOnMainThread).
Запустите создание контента в неосновном потоке / пользовательском интерфейсе:
Task.Run(async () =>
{
var itemsAdded = await AddContentAsync();
});
Пример создания контента:
Примечание: мы «показываем» метку CREATING CONTENT
, затем мы создаем20 Кнопки и добавляем их по одному в основной поток / пользовательский интерфейс, а также прокручиваем до нового содержимого по мере его добавления, как только содержимое будет завершено, мы прокручиваем обратно наверх и «скрываем» метку 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;
}
Результаты:
