У меня длинная работа, которую я хочу запустить синхронно (я рассмотрю позже асинхронный).Xamarin Loading Overlay Not Showing
Я использую код наложения здесь - http://docs.xamarin.com/recipes/ios/standard_controls/popovers/display_a_loading_message
Вот мой тестовый код -
public override void ViewDidAppear (bool animated)
{
base.ViewDidAppear (animated);
loadingOverlay = new LoadingOverlay (UIScreen.MainScreen.Bounds);
View.Add (loadingOverlay);
int i = 0;
while (i < 5000)
{
Console.WriteLine(i);
i++;
}
loadingOverlay.Hide();
}
Но первоначальное наложение не показывает, только Скрыть анимации после цикла в то время как завершается?
я могу произвести хак/обходной путь, как так -
public override void ViewDidAppear (bool animated)
{
base.ViewDidAppear (animated);
loadingOverlay = new LoadingOverlay (UIScreen.MainScreen.Bounds);
View.Add (loadingOverlay);
NSTimer nstimer = NSTimer.CreateScheduledTimer (1,() => {
int i = 0;
while (i < 5000) {
Console.WriteLine (i);
i++;
}
loadingOverlay.Hide();
});
}
Но может кто-то пожалуйста, объясните мне, почему это происходит, и как писать код правильно так IOS рисует накладку на экран перед началом петля.
Ваш первый пример блокирует поток пользовательского интерфейса. Второй пример запускает NSTimer в фоновом потоке, поэтому он не блокирует пользовательский интерфейс. – Jason
Спасибо за подтверждение, что Джейсон, но есть ли другой способ сказать IOS обновить поток пользовательского интерфейса после добавления наложения до его блокировки? или это лучшее обходное решение? – WickedW