Final ОбновлениеCOMException в WinRT приложение манипулируя backstack
Я нашел эту проблему. Это не имеет никакого отношения к манипулированию задним ходом. Причиной был словарь ресурсов, который я не зарегистрировал правильно.
Я пишу приложение Windows Phone 8.1. Поскольку я использую MVVMcross, у меня есть классическая настройка проекта: портативный проект, который содержит ViewModels и проект Windows Phone 8.1, который содержит Views.
В некоторых случаях я хочу удалить страницу из задней части экрана, чтобы страница перед удаленной страницей отображалась, когда я нажимаю на подставку.
Для достижения такого поведения я следовал одна примера: https://edsnider.net/2014/04/07/clearing-windows-phone-nav-back-stack-in-mvvmcross/
Все работает хорошо, за исключением того, когда я делаю полный перезапуск, когда я нахожусь в приложении и снова откройте приложение снова. В этом случае я получаю исключение COM, когда я делаю манипуляции с задней загрузкой:
The operation identifier is not valid.
The BackStack or ForwardStack cannot be changed while navigating.
Вопрос: Что не так с моим кодом?
Вот соответствующие фрагменты кода:
Метод DropPageAndShowViewModel определен в базовом классе моего ViewModels. Исключение происходит, когда я называю этот метод в ViewModel:
DropPageAndShowViewModel<TourdatenSummaryViewModel>(
new TourdatenSummaryViewModel.NavObject
{
Tournummer = _tour.Nummer
});
Это базовый класс моих ViewModels. BaseViewModel происходит от MvxViewModel.
public class BasePageViewModel : BaseViewModel
{
...
protected void DropPageAndShowViewModel<TViewModel>()
where TViewModel : BasePageViewModel
{
ShowViewModel<TViewModel>();
ChangePresentation(new DropCurrentBackStackEntryHint());
}
protected void DropPageAndShowViewModel<TViewModel>(object parameterValuesObject)
where TViewModel : BasePageViewModel
{
ShowViewModel<TViewModel>(parameterValuesObject);
ChangePresentation(new DropCurrentBackStackEntryHint());
}
}
Это CustomViewPresenter, который делает манипуляцию backstack:
public class DropCurrentBackStackEntryHint : MvxPresentationHint
{
}
public class CustomViewPresenter : MvxWindowsViewPresenter
{
private readonly IMvxWindowsFrame _rootFrame;
public CustomViewPresenter(IMvxWindowsFrame rootFrame) : base(rootFrame)
{
_rootFrame = rootFrame;
}
protected Frame RootFrame
{
get { return (Frame) _rootFrame.UnderlyingControl; }
}
public override void ChangePresentation(MvxPresentationHint hint)
{
if (hint is DropCurrentBackStackEntryHint)
{
if (RootFrame.BackStack.Any())
{
RootFrame.BackStack.RemoveAt(RootFrame.BackStackDepth - 1);
}
}
base.ChangePresentation(hint);
}
}
я нашел только одну ссылку на этот COM исключение в Интернете, но не было полезно для меня: https://github.com/Windows-XAML/Template10/issues/454
Обновление
Я получаю необработанное исключение в этот обработчик:
void App_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
if (Debugger.IsAttached)
Debugger.Break();
e.Handled = true;
var message = "Error: \n\n" +
e.Message + "\n\n" +
e.Exception.HResult + "\n\n" +
e.Exception.Message + "\n\n" +
e.Exception.StackTrace;
new MessageDialog(message).ShowAsync();
}
Когда исключение я получаю этот текст:
The operation identifier is not valid.
The BackStack or ForwardStack cannot be changed while navigating.
-2147020579
The operation identifier is not valid. (Exception from HRESULT: 0x800710DD)
код HRESULT действительно помогает мне ни:
C:\> err 0x800710DD
# as an HRESULT: Severity: FAILURE (1), Facility: 0x7, Code 0x10dd
# for hex 0x10dd/decimal 4317 :
ERROR_INVALID_OPERATION winerror.h
# The operation identifier is not valid.
# 1 matches found for "0x800710DD"
Update 2
Исключение возникает только при создании приложения в режиме деблокирования. Это не происходит в режиме отладки. И я должен перезагрузить устройство, чтобы произвести его.
Я видел нечто подобное. В моем случае это было с тем, что карта Bing не была выпущена и была вызвана COMException. – Cheesebaron
Не работает «BackStack или ForwardStack при навигации». дать вам достаточно указания? – Cheesebaron
Нет, недостаточно! Можете ли вы дать мне подсказку? – Olaf