Я создаю приложение для iOS (на Мауи), используя пользовательские системы пользовательского интерфейса и компоненты, созданные на основе базовых элементов. Запуск приложения выглядит так:
Код: Выделить всё
public partial class App : Application {
SpecialPage1 page1;
SpecialPage2 page2;
SpecialPage3 page3;
SpecialPage4 page4;
AbsoluteLayout abs;
public App() {
//set main page of app
ContentPage mainPage = new ();
this.MainPage = mainPage;
abs = new();
mainPage.Content = abs;
//start building and adding UI elements to it
page1 = new();
abs.Add(page1);
page2 = new();
abs.Add(page2);
page3 = new();
abs.Add(page3);
page4 = new();
abs.Add(page4);
}
}
Код: Выделить всё
SpecialPage1iOS закроет ваше приложение при запуске, если сборка займет слишком много времени (даже в режиме отладки). когда он, естественно, будет медленнее).
Поскольку это элементы пользовательского интерфейса, они должны быть построены в основном потоке. Поэтому мне интересно, какой лучший способ — сдвинуть или десинхронизировать их здание с основным циклом.
Идея 1: Таймер
Один из вариантов — создать таймер потока пользовательского интерфейса и на каждом такте таймера запускать такую функцию, как:
Код: Выделить всё
void timerTick(){
if (page1 ==null){
page1= new();
abs.Add(page1);
}
else if (page2==null){
page2 = new();
abs.Add(page2);
}
else if (page3==null){
page3 = new();
abs.Add(page3);
}
else if (page4==null){
page4 = new();
abs.Add(page4);
}
else{
timer.Stop();
}
}
Идея 2: асинхронная
Я не уверен, верно ли это, но мне интересно, запускает ли сборка страниц как асинхронные задачи но в основной теме помогло бы. Если их ждут, я думаю, это все равно приведет к сбою, если они займут слишком много времени. Но если их не ждут, то, возможно, это поможет лучше?
т.е.:
Код: Выделить всё
public App() {
//set main page of app
ContentPage mainPage = new ();
this.MainPage = mainPage;
abs = new();
mainPage.Add(abs);
//start building and adding UI elements to it
Application.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
page1 = new();
abs.Add(page1);
});
Application.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
page2 = new();
abs.Add(page2);
});
//etc
}
Вопрос
Допустим, нет возможности упростить сборку всего приложения, но можно уменьшить сложность сборки компонентов (
Код: Выделить всё
page1,page2,page3,page4What would the best solution be to let this build progressively happen without triggering the WatchDog?
Thanks for any thoughts.
Источник: https://stackoverflow.com/questions/781 ... killing-ap
Мобильная версия