【问题标题】:Upgrade From Silverlight 4 to Silverlight 5 causing AccessViolationException从 Silverlight 4 升级到 Silverlight 5 导致 AccessViolationException
【发布时间】:2012-02-03 08:40:05
【问题描述】:

我们已将项目从 Silverlight 4 升级到 Silverlight 5,现在我们正在体验 AccessViolationException在代码中不时出现在不同的地方,这个异常也是导致浏览器崩溃的原因。

是否有任何指导方针如何防止这种情况发生?

我正在添加弹出AccessViolationException 的堆栈跟踪:

[Managed to Native Transition]
System.Windows.dll!MS.Internal.XcpImports.SetValue(MS.Internal.IManagedPeerBase obj, System.Windows.DependencyProperty property, string s) + 0x6f bytes
System.Windows.dll!MS.Internal.XcpImports.SetValue(MS.Internal.IManagedPeerBase doh, System.Windows.DependencyProperty property, object obj) + 0x2ce bytes
System.Windows.dll!System.Windows.DependencyObject.SetObjectValueToCore(System.Windows.DependencyProperty dp, object value) + 0xd6 bytes
System.Windows.dll!System.Windows.DependencyObject.SetEffectiveValue(System.Windows.DependencyProperty property, ref System.Windows.EffectiveValueEntry newEntry, object newValue) + 0x35 bytes
System.Windows.dll!System.Windows.DependencyObject.UpdateEffectiveValue(System.Windows.DependencyProperty property, System.Windows.EffectiveValueEntry oldEntry, ref System.Windows.EffectiveValueEntry newEntry, System.Windows.DependencyObject.ValueOperation operation) + 0xe6 bytes
System.Windows.dll!System.Windows.DependencyObject.RefreshExpression(System.Windows.DependencyProperty dp) + 0x47 bytes
System.Windows.dll!System.Windows.Data.BindingExpression.SendDataToTarget() + 0xff bytes
System.Windows.dll!System.Windows.Data.BindingExpression.SourceAcquired() + 0x5f bytes
System.Windows.dll!System.Windows.Data.Debugging.BindingBreakPoint.BreakOnSharedType.AnonymousMethod__3() + 0x14 bytes
[Native to Managed Transition]
[Managed to Native Transition]
mscorlib.dll!System.Delegate.DynamicInvokeImpl(object[] args) + 0x6b bytes
mscorlib.dll!System.Delegate.DynamicInvoke(object[] args) + 0xb bytes
BindingDebugging!TextPropertyPanelxaml_5.BindingOperation(object BindingState) + 0x30 bytes
[Native to Managed Transition]
[Managed to Native Transition]
System.Windows.dll!System.Windows.Data.Debugging.BindingBreakPoint.BreakOnSharedType(System.Type emittedType, System.Windows.Data.Debugging.BindingDebugState debugState, int bindingNumber, int line, int column, System.Action callback) + 0xd5 bytes
System.Windows.dll!System.Windows.Data.Binding.EnsureBreakPoint(System.Windows.Data.Debugging.BindingDebugState debugState, System.Action callback, bool canDelay) + 0x1ff bytes
System.Windows.dll!System.Windows.Data.BindingExpression.System.Windows.IDataContextChangedListener.OnDataContextChanged(object sender, System.Windows.DataContextChangedEventArgs e) + 0xa4 bytes
System.Windows.dll!System.Windows.Data.BindingExpression.DataContextChanged(object sender, System.Windows.DataContextChangedEventArgs e) + 0xc bytes
System.Windows.dll!System.Windows.FrameworkElement.OnDataContextChanged(System.Windows.DataContextChangedEventArgs e) + 0x1e bytes
System.Windows.dll!System.Windows.FrameworkElement.OnAncestorDataContextChanged(System.Windows.DataContextChangedEventArgs e) + 0x26 bytes
System.Windows.dll!System.Windows.FrameworkElement.NotifyDataContextChanged(System.Windows.DataContextChangedEventArgs e) + 0xcb bytes
System.Windows.dll!System.Windows.FrameworkElement.OnAncestorDataContextChanged(System.Windows.DataContextChangedEventArgs e) + 0x32 bytes
System.Windows.dll!System.Windows.FrameworkElement.NotifyDataContextChanged(System.Windows.DataContextChangedEventArgs e) + 0xcb bytes
System.Windows.dll!System.Windows.FrameworkElement.OnPropertyChanged(System.Windows.DependencyProperty dp) + 0x47 bytes
System.Windows.dll!System.Windows.DependencyObject.RaisePropertyChangeNotifications(System.Windows.DependencyProperty dp, object oldValue, object newValue) + 0x5e bytes
System.Windows.dll!System.Windows.DependencyObject.UpdateEffectiveValue(System.Windows.DependencyProperty property, System.Windows.EffectiveValueEntry oldEntry, ref System.Windows.EffectiveValueEntry newEntry, System.Windows.DependencyObject.ValueOperation operation) + 0xf3 bytes
System.Windows.dll!System.Windows.DependencyObject.SetValueInternal(System.Windows.DependencyProperty dp, object value, bool allowReadOnlySet, bool isBindingInStyleSetter) + 0x248 bytes
System.Windows.dll!System.Windows.FrameworkElement.DataContext.set(object value) + 0x28 bytes
ContentManagerSilverlight!ContentManagerSilverlight.TextPropertyPanel.set_ItemDetails(ContentManagerClientTypes.ServiceLibrary.ItemDetails value) Line 132 + 0xd bytes
ContentManagerSilverlight!ContentManagerSilverlight.PropertiesPanelControl.SetPanelsVisability(ContentManagerClientTypes.ServiceLibrary.ItemDetails p_item) Line 78 + 0x1f bytes
ContentManagerSilverlight!ContentManagerSilverlight.PropertiesPanelControl.HandleEvents(Object p_sender, String p_propertyName, Object p_propertyValue) Line 130 + 0x35 bytes
ContentManagerClientTypes!ContentManagerClientTypes.Messenger.Send(Object p_sender, String p_propertyName, Object p_propertyValue) Line 34 + 0x55 bytes
ContentManagerSilverlight!ContentManagerSilverlight.LibraryViewModel.set_SelectedItemDetails(ContentManagerClientTypes.ServiceLibrary.ItemDetails value) Line 181 + 0x25 bytes
[Native to Managed Transition]
[Managed to Native Transition]
System.Windows.dll!System.Windows.CLRPropertyListener.Value.set(object value) + 0x23 bytes
System.Windows.dll!System.Windows.PropertyAccessPathStep.Value.set(object value) + 0xe bytes
System.Windows.dll!System.Windows.Data.BindingExpression.UpdateValue() + 0x692 bytes
System.Windows.dll!System.Windows.Data.Debugging.BindingBreakPoint.BreakOnSharedType.AnonymousMethod__3() + 0x14 bytes
[Native to Managed Transition]
[Managed to Native Transition]
mscorlib.dll!System.Delegate.DynamicInvokeImpl(object[] args) + 0x6b bytes
mscorlib.dll!System.Delegate.DynamicInvoke(object[] args) + 0xb bytes
BindingDebugging!LibraryThumbViewxaml.BindingOperation(object BindingState) + 0x30 bytes
[Native to Managed Transition]
[Managed to Native Transition]
System.Windows.dll!System.Windows.Data.Debugging.BindingBreakPoint.BreakOnSharedType(System.Type emittedType, System.Windows.Data.Debugging.BindingDebugState debugState, int bindingNumber, int line, int column, System.Action callback) + 0xd5 bytes
System.Windows.dll!System.Windows.Data.Binding.EnsureBreakPoint(System.Windows.Data.Debugging.BindingDebugState debugState, System.Action callback, bool canDelay) + 0x1ff bytes
System.Windows.dll!System.Windows.Data.BindingExpression.UpdateValueEnsureBreak() + 0x53 bytes
System.Windows.dll!System.Windows.Data.BindingExpression.UpdateValueIfNecessary() + 0x68 bytes
System.Windows.dll!System.Windows.Data.BindingExpression.TargetPropertyChanged(System.Windows.DependencyObject sender, System.Windows.DependencyProperty dp) + 0x2b bytes
System.Windows.dll!System.Windows.DependencyObject.OnPropertyChanged(System.Windows.DependencyProperty dp) + 0x16 bytes
System.Windows.dll!System.Windows.FrameworkElement.OnPropertyChanged(System.Windows.DependencyProperty dp) + 0x54 bytes
System.Windows.dll!System.Windows.Controls.Primitives.Selector.OnPropertyChanged(System.Windows.DependencyProperty dp) + 0x13 bytes
System.Windows.dll!System.Windows.DependencyObject.RaisePropertyChangeNotifications(System.Windows.DependencyProperty dp, object oldValue, object newValue) + 0x5e bytes
System.Windows.dll!System.Windows.DependencyObject.UpdateEffectiveValue(System.Windows.DependencyProperty property, System.Windows.EffectiveValueEntry oldEntry, ref System.Windows.EffectiveValueEntry newEntry, System.Windows.DependencyObject.ValueOperation operation) + 0xf3 bytes
System.Windows.dll!System.Windows.DependencyObject.SetValueInternal(System.Windows.DependencyProperty dp, object value, bool allowReadOnlySet, bool isBindingInStyleSetter) + 0x1c9 bytes
System.Windows.dll!System.Windows.Controls.Primitives.Selector.UpdatePublicSelectionProperties(int oldSelectedIndex, int newSelectedIndex, object oldSelectedItem, object newSelectedItem) + 0xca bytes
System.Windows.dll!System.Windows.Controls.Primitives.Selector.SelectionChanger.End() + 0x172 bytes
System.Windows.dll!System.Windows.Controls.Primitives.Selector.SelectionChanger.SelectJustThisItem(int oldIndex, int newIndex) + 0x170 bytes
System.Windows.dll!System.Windows.Controls.ListBox.MakeSingleSelection(int index) + 0x3e bytes
System.Windows.dll!System.Windows.Controls.ListBox.HandleItemSelection(System.Windows.Controls.ListBoxItem item, bool isMouseSelection) + 0x7a bytes
System.Windows.dll!System.Windows.Controls.ListBox.OnListBoxItemClicked(System.Windows.Controls.ListBoxItem item) + 0x7 bytes
System.Windows.dll!System.Windows.Controls.ListBoxItem.OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e) + 0x54 bytes
System.Windows.dll!System.Windows.Controls.Control.OnMouseLeftButtonDown(System.Windows.Controls.Control ctrl, System.EventArgs e) + 0x38 bytes
System.Windows.dll!MS.Internal.JoltHelper.FireEvent(System.IntPtr unmanagedObj, System.IntPtr unmanagedObjArgs, int argsTypeIndex, int actualArgsTypeIndex, string eventName, uint flags) + 0x28f bytes
[Appdomain Transition]

【问题讨论】:

  • 不是一个真正的答案,所以我把它放在 cmets 中。但似乎你并不孤单:stackoverflow.com/questions/8495242/…, forums.silverlight.net/t/245247.aspx/1, ...
  • 我还在和这个作斗争。你能重现这个吗?我无法在我的项目之外实现这一点。
  • 您在使用 Telerik 的控件吗?他们已经修复了一次这种情况(我一直在关注一些链接,在此处复制此信息)。
  • 我没有使用telerik控件,没有尝试创建测试项目,
  • @jv42:Telerik 是否提供了有关修复的任何信息、它需要什么,甚至是这种行为的原因?

标签: silverlight silverlight-4.0 access-violation silverlight-5.0


【解决方案1】:

在更新绑定到文本框的属性时,使用 Bureau Blue 也会导致相同的 System.AccessViolationException。

对我有用的解决方法是将 TextBox 样式从 Theme dll 复制到合并到 App.xaml 资源字典中的 ResourceDictionary 中。这样做避免了必须在每个视图上指定主题。

我使用的主题来自 2010 年 4 月的工具包。我不知道以后的工具包版本是否可以解决这个问题。

【讨论】:

    【解决方案2】:

    好的,我找到了解决方案。以前,我在 Mainpage.xaml 文件中设置了整体应用程序样式/主题 - 并且主题在运行时波及所有子导航页面。这以某种方式导致了问题。

    如果我明确地逐页设置样式 - 一切正常!!

    因此:(使用 BureauBlue 工具包主题)

    xmlns:SystemColors="clr-namespace:System.Windows.Controls.Theming;     assembly=System.Windows.Controls.Theming.BureauBlue" 
    
    <SystemColors:BureauBlueTheme>
        <Grid x:Name="LayoutRoot">
    

    。 . .

    【讨论】:

      【解决方案3】:

      我找到了问题的一个根源(我不确定它是否解决了所有这些 AccessViolationException 问题),但我的系统现在更加稳定了。

      显然使用了最新工具包中的Bureau Black Theme,并结合了TextBox,导致了这个问题。

      我的解决方法是重新编译这个主题,没有TextBox的样式,AccessViolation的问题已经消失了,这个阶段我们没有对整个系统进行深度测试,但这解决了一个我可以快速重现的问题,所以我认为这可能解决了更多类似的问题。

      希望它对某人有所帮助。

      问候,

      里尔

      【讨论】:

        【解决方案4】:

        我的猜测是运行时安装错误,或者是浏览器插件或防病毒软件。

        以这种方式排除故障:

        1. DrWatson 日志显示什么? Tess Ferrandez 有很多关于如何阅读崩溃日志的信息。或在此处发布您的崩溃日志。
        2. 不同的浏览器会出现这种情况吗?
        3. 您可以关闭任何附加组件吗?
        4. 所有计算机上都会出现这种情况吗?
        5. 您的应用程序是否使用任何 COM 自动化或 PInvoke?

        【讨论】:

        • 此错误在不同的计算机(超过 2 台)和不同的浏览器上重新出现。
        • 我还附上了屏幕截图到 qustion,但这是我得到的例外。 System.AccessViolationException 未处理 Message=尝试读取或写入受保护的内存。这通常表明其他内存已损坏。内部异常:
        • 看看这个ContentManagerSilverlight!ContentManagerSilverlight.TextPropertyPanel.set_ItemDetails 可能是跨线程访问吧。
        • 不,它是从应用程序的主线程中发生的(我已经从我的 Visual Studio 中检查了两倍)
        猜你喜欢
        • 2011-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-04
        相关资源
        最近更新 更多