【问题标题】:Windows Phone Universal app throws AccessViolation when navigatingWindows Phone 通用应用程序在导航时引发 AccessViolation
【发布时间】:2015-08-08 07:25:51
【问题描述】:

我正在开发 Windows Phone 8.1 通用应用程序并遇到以下问题。

该应用程序有许多视图及其对应的 Caliburn.Micro ViewModel,其中两个包含一个 MapControl,其引脚绑定到 MapLocation 对象的 Observable 集合。

MapLocation 类如下:

public class MapLocation : PropertyChangedBase
{
    private string _title;
    public string Title
    {
        get { return _title; }
        set
        {
            _title = value; 
            NotifyOfPropertyChange();
        }
    }

    private Geopoint _geoPoint;
    public Geopoint GeoPoint
    {
        get { return _geoPoint; }
        set
        {
            _geoPoint = value; 
            NotifyOfPropertyChange();
        }
    }

    private Uri _imageUri;
    public Uri ImageUri
    {
        get { return _imageUri; }
        set
        {
            _imageUri = value; 
            NotifyOfPropertyChange();
        }
    }

    private bool _isMoving;
    public bool IsMoving
    {
        get { return _isMoving; }
        set
        {
            _isMoving = value; 
            NotifyOfPropertyChange();
        }
    }
    private Windows.Services.Maps.MapAddress _address;
    public Windows.Services.Maps.MapAddress Address
    {
        get { return _address; }
        set
        {
            _address = value;
            NotifyOfPropertyChange();
        }
    }
}

列表通过 DispatcherTimer 频繁更新,以显示所有项目的更新位置。

我面临的问题是,每次我在至少访问过一次后导航到一个页面时,都会收到 AccessViolation 异常并且应用程序崩溃。

我猜这可能与我的 ViewModel 的某种兑现有关。

以前有人见过这种行为吗?

【问题讨论】:

  • 你是如何向 ObservableCollection 添加项目的?
  • 抱歉,Type 属性不存在...它是误留在那里的。
  • 我想,但我已经抛出了我原来的问题。您是否深入了解是否真的是 NavigationService 违规或与收集有关?您还启用了日志记录吗?
  • 我该如何挖掘它...调试时得到的只是输出中的一条消息程序“[2132] Client.WindowsPhone.exe”已退出,代码为 -1073741819( 0xc0000005) '访问冲突'。 你是什么意思日志记录?
  • 将项目添加到集合MapLocations.Insert(0, new MapLocation { Id = i, ImageUri = new Uri("ms-appx:///Assets/pin.png"), GeoPoint = new Geopoint(new BasicGeoposition { Latitude = 38.03 + (rand.NextDouble() / 100.0), Longitude = 23.82 + (rand.NextDouble() / 100.0) }) }); //Add new

标签: c# xaml caliburn.micro win-universal-app


【解决方案1】:

这是一个已知的错误。好像他们正在修复它。 https://social.msdn.microsoft.com/forums/windowsapps/en-us/fde433e8-87f8-4005-ac81-01b12e016986/debugging-access-violation-exceptions

只是在导航前给出延迟

等待Task.Delay(50); //避免访问冲突异常 //导航

我希望这将暂时解决您的目的。

【讨论】:

    【解决方案2】:

    CM的Logging,可以放到bootstrapper或者app.xaml.cs的Configure中

    LogManager.GetLog = type => new DebugLog(type);

    这将有助于解决绑定问题。至于挖掘异常,将调试点放在主异常处理程序或后退导航中,我怀疑是集合...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多