Я новый разработчик Xamarin и пытаюсь создать приложение с помощью Xamarin.Forms. В приложении все работает нормально, но я заметил странное поведение: будь то на устройстве или с эмулятором, когда я выключаю питание один раз, а затем снова включаю, методы OnSleep () и OnResume () работают просто отлично.
Но проблема в том, что, когда я повторяю ту же операцию во второй раз, приложение зависает и для его разблокировки мне нужно либо закрыть приложение и открыть его снова, либо go, чтобы выбрать другое меню приложения работают в фоновом режиме (я не знаю, как это называется) и возвращаются в приложение. Я проверил точки останова, и эти два метода вызываются в первый и второй раз. Я пытался удалить все из этих методов, но проблема сохраняется. Кто-нибудь знает, почему он так себя ведет? Спасибо.
В моих файлах App.xaml.cs:
protected override void OnStart()
{
if (isLoggedIn())
{
MainPage = new NavigationPage(new MDPage());
GeneralViewModel general = new GeneralViewModel();
general.checkUser();
}
else
{
MainPage = new NavigationPage(new LoginPage());
}
}
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
if (isLoggedIn()) //With a breakpoint, this is executed
{
MainPage.Navigation.PushAsync(new MDPage());
/*this is also executed but the second time,
*even if it is executed the application freezes*/
GeneralViewModel general = new GeneralViewModel();
general.checkUser();
}
else
{
MainPage = new NavigationPage(new LoginPage());
}
}
public bool isLoggedIn()
{
if (Settings.GeneralSettings != null && Settings.GeneralSettings != "")
{
return true;
}
else
{
return false;
}
}
Метод GeneralViewModel, который я вызываю (кстати, даже без него проблема сохраняется)
public void DoSomething()
{
ThreadPool.QueueUserWorkItem(o => checkUser());
}
public Task checkUser()
{
if (Settings.GeneralSettings != null && Settings.GeneralSettings != "")
{
DoSomething();
}
else
{
try
{
var data = Application.Current.MainPage;
Device.BeginInvokeOnMainThread(async () =>
{
await data.DisplayAlert("Information(s)", "Vous avez été déconnecté", "OK");
});
}
catch (Exception e)
{
Console.WriteLine("exception");
}
}
return default;
}
edit : Я проверил консоль, и кажется, что на экране ничего не появляется, когда я нажимаю кнопку на замороженной странице, действие, которое должна выполнить кнопка, происходит, но экран не меняется.