Исключение при приостановке/возобновлении на W10M — значение не попадает в ожидаемый диапазон

Я использую шаблон 10 NuGet версии 1.1.4 и вижу следующее исключение, когда выполняю следующие действия на своем устройстве с Windows 10 Mobile:

  1. Запустите приложение
  2. Нажмите кнопку «Домой» Windows (возвращает меня на начальный экран)
  3. Запустите приложение снова

Что происходит, так это то, что приложение не запускается, за исключением:

Value does not fall within the expected range.

Стек вызовов:

 at Windows.UI.Xaml.Controls.ContentControl.put_Content(Object value)
   at Template10.Common.BootStrapper.NavigationServiceFactory(BackButton backButton, ExistingContent existingContent, Frame frame)
   at Template10.Common.BootStrapper.NavigationServiceFactory(BackButton backButton, ExistingContent existingContent)
   at MyApp.App.OnInitializeAsync(IActivatedEventArgs args)
   at Template10.Common.BootStrapper.<InitializeFrameAsync>d__77.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Template10.Common.BootStrapper.<InternalLaunchAsync>d__53.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.<ThrowAsync>b_Content = new Views.Shell(nav)0(Object state)
   at System.Threading.WinRTSynchronizationContext.Invoker.InvokeCore()

Этого не происходит, если я нахожусь в режиме отладки в Visual Studio и использую события образа жизни для приостановки/возобновления.

Я не уверен, как исследовать это дальше? Любые идеи?

Спасибо.

Изменить: моя функция OnInitializeAsync выглядит так:

 public override Task OnInitializeAsync(IActivatedEventArgs args)
        {

            if ((Window.Current.Content as ModalDialog) == null)

            { // setup hamburger shell

                var nav = NavigationServiceFactory(BackButton.Attach, ExistingContent.Include);
                nav.Frame.ContentTransitions.Clear();//disable animations
                Window.Current.Content = new ModalDialog

                { DisableBackButtonWhenModal = true, Content = new Views.LoginPage(), ModalContent = new Views.Busy(), };

            }
            return Task.CompletedTask;
        }

Единственное, что я изменил, это Content = new Views.LoginPage() вместо Content = new Views.Shell(nav)


person Darshan    schedule 25.02.2016    source источник
comment
Вы что-нибудь делаете в OnInitAsync?   -  person Jerry Nixon    schedule 25.02.2016
comment
@JerryNixon-MSFT, возможно: публичное переопределение Task OnInitializeAsync (аргументы IActivatedEventArgs) { if ((Window.Current.Content as ModalDialog) == null) { var nav = NavigationServiceFactory (BackButton.Attach, ExistingContent.Include); nav.Frame.ContentTransitions.Clear();//нет анимации Window.Current.Content = new ModalDialog { DisableBackButtonWhenModal = true, Content = new Views.LoginPage(), ModalContent = new Views.Busy(), }; } вернуть Task.CompletedTask; }   -  person Darshan    schedule 26.02.2016
comment
@JerryNixon-MSFT, так что, поскольку этот код трудно читать, единственное, что я делаю по-другому, это: Content = new Views.LoginPage() вместо Content = new Views.Shell(nav)   -  person Darshan    schedule 26.02.2016
comment
Пожалуйста, обновите свой вопрос своим кодом, потому что его трудно читать.   -  person RicardoPons    schedule 26.02.2016
comment
@RicardoPons, см. редактирование   -  person Darshan    schedule 26.02.2016


Ответы (1)


Я также столкнулся с этой проблемой. Проблема в том, что вы устанавливаете Window.Current.Content несколько раз, используя повторяющееся значение. Где-то в вашем приложении должен быть фрагмент кода, который также устанавливает содержимое ИЛИ нулевая проверка в OnInitializedAsync не работает.

Если вы не представляете, как это возможно, установите точку останова в методе OnInitializedAsync и проверьте, работает ли проверка нуля. Кроме того, имейте в виду, что параметр возобновления в событиях жизненного цикла Visual Studio, вероятно, содержит ошибку или что-то в этом роде. У него другое поведение, чем если бы вы фактически возобновили свое приложение. Чтобы протестировать возобновление с подключенным отладчиком, просто запустите приложение в режиме отладки, затем приостановите его с помощью кнопки «События жизненного цикла», а затем запустите его с начального экрана эмулятора (НЕ используйте кнопку «Возобновить» в Visual Studio).

person Honza Kalfus    schedule 29.02.2016
comment
вы правы - я устанавливал Window.Current.Content где-то еще в своем приложении. - person Darshan; 02.03.2016