【问题标题】:FatalExecutionEngineError during navigation and collection methods导航和收集方法期间的 FatalExecutionEngineError
【发布时间】:2013-03-03 04:41:05
【问题描述】:

这可能是一个 mvvm-light 问题,而不是一个 winrt 问题,但我有一个使用 mvvm-light 和 SQLite 用 C# 编写的应用程序。这是一个电视节目库应用程序,可在主页上显示您的所有系列。然后,您可以深入了解您拥有的剧集等等。无论如何,我使用 mvvm-light messenger 将数据从系列库页面的视图模型发送到剧集页面的视图模型。在收到消息后,我使用 SQLite 填充名为 CombinedVMs 的 ObservableCollection 集合。

问题在于,我在进行此导航时似乎确实存在随机错误。错误是代码 80131544,我无法从调试器中获取任何其他信息,因为“本机框架位于调用堆栈的顶部”。该错误似乎总是在我的 CombinedVMs 集合中停止,通常是在我尝试添加它时。有时,当我点击后退按钮并调用一个方法来清除 CombinedVMs 集合时会发生错误。有时我可以多次在系列之间来回导航...有时我可以在出现错误之前执行两次。

当我将代码从在剧集视图上使用分组 GridView 控件更改为使用 ItemTemplateSelector 区分季节标题和剧集的非分组 GridView 时,这才开始发生在我身上。我使用 CombinedVMs (ObservableCollection) 来保存 SeasonItemViewModels 和 EpisodeItemViewModels。

我想知道这是否与我如何设置代码的 mvvm-light 部分有关。以下是我的导航方式。

public RelayCommand GoToSeriesCommand
{
    get
    {
        return _gotoSeriesCommand ?? (_gotoSeriesCommand = new RelayCommand(() =>
              {
                  SimpleIoc.Default.GetInstance<SeriesViewModel>();
                  Messenger.Default.Send<NavigateToSeriesViewMessage>(new NavigateToSeriesViewMessage() 
                  { 
                      FolderGuid = this.FolderGuid,
                      DisplayName = this.DisplayName,
                      FanartPathList = this.FanartPathList,
                      SeriesId = this.SeriesId
                  });
                  MainViewModel._navigationService.Navigate(typeof(SeriesView));
              }));
    }
}

我的 ViewModelLocator 中有这个是相关的:

static ViewModelLocator()
{
    ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

    if (ViewModelBase.IsInDesignModeStatic)
    {
        SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
        SimpleIoc.Default.Register<INavigationService, DesignNavigationService>();
    }
    else
    {
        SimpleIoc.Default.Register<IDataService, DataService>();
        SimpleIoc.Default.Register<INavigationService>(() => new NavigationService());
    }

    SimpleIoc.Default.Register<SeriesViewModel>();

}

public SeriesViewModel SeriesVM
{
    get
    {
        return ServiceLocator.Current.GetInstance<SeriesViewModel>();
    }
}

static public SeriesViewModel SeriesVMStatic
{
    get
    {
        return ServiceLocator.Current.GetInstance<SeriesViewModel>();
    }
}

无论如何,我很难过。我不知道如何进行。微软论坛上有一个关于这个特定错误代码的主题,但它是从去年开始的,并且声称它已从更新中修复。

我可以提供其他任何东西吗?我不知道从这里去哪里....提前谢谢!

【问题讨论】:

    标签: c# sqlite windows-runtime mvvm-light


    【解决方案1】:

    前段时间我有一个。如果您使用了非托管资源并且没有正确清理它们,它们就会发生。您可能会发现 SQLLite DB 正在使用非托管代码。我建议您仔细检查并确保在使用后处理所有 SQLLite 实例。

    【讨论】:

    • 谢谢。没想到我有答案。很抱歉没有早点给予信任。事实上,我几乎记不起这个问题了。 :( 我在使用 SQLite 时确实遇到了很多问题......尤其是尝试他们的异步代码。最终将所有内容都更改为同步。
    猜你喜欢
    • 2014-05-22
    • 2011-07-23
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多