I tried several solutions, With Task.Run(()=>) it can be done. UI froze when I try without Task, and it shows spinner only just before page change. There is 2 example, first one is working, but not all pagination work is needed task. I want second one work, just like first one.
Working one:
if (IsBusy) return;
Platforms.KeyboardHelper.HideKeyboard();
GlobalConstants.costantSpinner.Show();
try
{
GlobalVariables._loginDTO = await Task.Run(() => /*something to do before page change */);
await Shell.Current.GoToAsync("somePage");
}
catch (Exception ex) {/* Display ex*/ }
finally { IsBusy = false; GlobalConstants.costantSpinner.IsOpen = false; }
It works perfectly when with something to do before Not working one:
if (IsBusy) return;
GlobalConstants.costantSpinner.Show();
try { IsBusy = true; await Shell.Current.GoToAsync(/*Some page*/); }
catch (Exception ex) {/* Display ex*/}
finally { IsBusy = false; GlobalConstants.costantSpinner.IsOpen = false; }
If you want the spinner to appear and rotate for a while, you can add a delay before navigating to the other page.
if (IsBusy) return;
GlobalConstants.costantSpinner.Show();
try { IsBusy = true;
await Task.Delay(1000); // Add this line!
await Shell.Current.GoToAsync(/*Some page*/); }
catch (Exception ex) {/* Display ex*/}
finally { IsBusy = false; GlobalConstants.costantSpinner.IsOpen = false; }