导航和收集方法期间的FatalExecutionEngineError

时间:2013-03-03 04:41:06

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

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

麻烦的是,我在进行此导航时似乎存在真正的随机错误。错误是代码80131544,我无法从调试器获取任何其他信息,因为“本机帧位于调用堆栈之上”。这个错误似乎总是停留在我的CombinedVMs集合中,通常当我尝试添加它时。有时,当我点击后退按钮时会发生错误,并且会调用一个方法来清除CombinedVMs集合。我有时可以在系列之间来回导航很多次......有时我只能在它碰到错误之前做两次。

当我将我的代码从使用剧集视图上的分组GridView控件更改为使用ItemTemplateSelector来区分季节标题和剧集的非分组GridView时,才开始发生这种情况。我使用CombinedVMs(ObservableCollection< object>)来保存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>();
    }
}

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

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

1 个答案:

答案 0 :(得分:1)

我刚才有一个这样的人。如果您使用了非托管资源并且未正确清理它们,则会发生这种情况。您可能会发现SQLLite DB正在使用非托管代码。我建议您通过并确保在使用后处置所有SQLLite实例。