Silverlight 5 AccessViolationException

Silverlight 5 AccessViolationException,silverlight,silverlight-5.0,Silverlight,Silverlight 5.0,我安装了Silverlight 5 VS 2010工具和64位开发人员运行时,现在当我执行特定操作时,我得到一个System.AccessViolationException。项目仍然是Silverlight 4,我还没有升级它们。我在另一个开发人员的计算机上(他还没有安装SL5)验证了同样的代码在SL4中仍然有效。 消息是:{System.AccessViolationException:试图读取或写入受保护的内存。这通常表示其他内存已损坏。},它会杀死IE。 这是在单击delete conf

我安装了Silverlight 5 VS 2010工具和64位开发人员运行时,现在当我执行特定操作时,我得到一个System.AccessViolationException。项目仍然是Silverlight 4,我还没有升级它们。我在另一个开发人员的计算机上(他还没有安装SL5)验证了同样的代码在SL4中仍然有效。 消息是:
{System.AccessViolationException:试图读取或写入受保护的内存。这通常表示其他内存已损坏。}
,它会杀死IE。 这是在单击delete confirmation ChildWindow的ok按钮并且ok action事件中的断点未被命中后发生的(使用类似代码的其他delete confirmation没有此问题)。 堆栈跟踪指向

System.Windows.dll!MS.Internal.XcpImports.SetValue(MS.Internal.IManagedPeerBase obj = {Telerik.Windows.Controls.RadWatermarkTextBox}, System.Windows.DependencyProperty property, string s) + 0x6f bytes    
VS指向我的RadDateTimePicker自定义样式:
“BindingDebugging!RadDateTimePickerxaml_2.BindingOperation_1100_562(对象BindingState={System.Windows.Data.Debugging.BindingDebuggState})第1行+0x11字节未知”

我从控件和App.xaml中删除了样式,但仍然得到一个异常。。。这次它指向Telerik主题
“调试器将要求用户查找文件:Telerik.Windows.Controls.Input;Component\Themes\Office\Black\DateTimePicker.xaml”

我的同事提到,他在Silverlight中将一些格式错误的XAML发送给XMLWriter时看到了相同的异常

我会在找到它时添加更多信息

有人知道该在样式文件中查找什么吗

编辑:我已经在一些地方看到了这一点,不仅仅是连接到DateTimePicker。我把这个交叉贴在了

我也得到了这个堆栈跟踪异常。这并不是每次都会发生,但是当我使用RadNumericUpDown更改矩形的宽度时,RaisePropertyChanged(“宽度”)被调用:>

System.Windows.dll!MS.Internal.XcpImports.SetValue(MS.Internal.IManagedPeerBase obj = {Telerik.Windows.Controls.PickerTextBox}, 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 = {System.Windows.CoreDependencyProperty}, ref System.Windows.EffectiveValueEntry newEntry = {System.Windows.EffectiveValueEntry}, object newValue = "103") + 0x35 bytes    
    System.Windows.dll!System.Windows.DependencyObject.UpdateEffectiveValue(System.Windows.DependencyProperty property = {System.Windows.CoreDependencyProperty}, System.Windows.EffectiveValueEntry oldEntry, ref System.Windows.EffectiveValueEntry newEntry, System.Windows.DependencyObject.ValueOperation operation) + 0xe6 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.Controls.TextBox.Text.set(string value) + 0x33 bytes  
    Telerik.Windows.Controls.Input!Telerik.Windows.Controls.RadNumericUpDown.UpdateText() + 0x50 bytes  
    Telerik.Windows.Controls.Input!Telerik.Windows.Controls.RadNumericUpDown.OnValueChanged(Telerik.Windows.Controls.RadRangeBaseValueChangedEventArgs e = {Telerik.Windows.Controls.RadRangeBaseValueChangedEventArgs}) + 0xd6 bytes   
编辑#2: 这似乎是相关的:

编辑#3: 我无法在我的项目之外复制这个。我也没有通过注释用户控件和代码部分来阻止这种情况的发生。我甚至从XAML和它似乎连接的RadNumericUpDown中删除了绑定。我还没有删除我们的自定义样式,也许这是下一步要尝试的有人知道我如何复制这个并从那里开始工作吗


编辑#4:他们用最新版本修复了它,根据:

当数据绑定到隐藏元素时,我看到了这个异常。我们有一些字段是可见的或不基于某些数据绑定的,但这两个字段都使用另一个数据绑定进行更新。当对隐藏字段激发RaisePropertyChanged时,我们得到AccessViolationException。我必须在代码中添加一些检查,以在控件不可见时抑制RaiseProperty更改。

更新到Silverlight 5后,我们“遇到”了此问题。设置(发件人为RadComboBox)时引发AccessViolationException。ItemsSources在各种控件的加载事件期间引发。这种错误很难重现,并且在相同的试验条件下并不总是出现。但是,我认为最好的解决办法如下:

Silverlight 4:

(sender as RadComboBox).ItemsSource = OurClass.MakeOurList();
当我添加

Silverlight 5:

(sender as RadComboBox).UpdateLayout();

(sender as RadComboBox).ItemsSource = OurClass.MakeOurList();

我相信这充其量只是一个“变通办法”,希望听到更好的解决方案。但现在我们又重新开始了

我终于找到了我的具体问题。它只发生在继承的ChildWindow之后的元素上

我有一个黑客试图修复几个月前的一个bug。一旦我删除了它,异常就停止了。我很确定,由于其他地方的改进,我不再需要黑客了,所以这是双重奖励!我在几个地方尝试将调用封送回UI线程,但计时器中的某些东西(应该在UI线程上)不允许这样做(这是我的理论)。祝所有寻找答案的人好运+到目前为止只有一个

this.Closed += (s, e) =>
{
var timer = new System.Windows.Threading.DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(.25);
timer.Tick += (object senderTimer, EventArgs eTimer) =>
{
    timer.Stop();

    // without the timer, the content will disappear before the window closes
    this.contentHolder.Child = null;
};

timer.Start();
};
我无法在一个单独的项目中用ChildWindow复制这个。所以这个答案没有那么有用。

对于我们几个小时前提交的同一个问题,有一个解决方案。请投票表决,以便尽快确定

RadComboBox已经包含一个解决方案,因此请检查您帐户下的最新内部版本,如果问题仍然存在,请通知我们。关于同样的问题


我希望这能有所帮助。

我已经为我的自定义主题更新了DateTimePicker.xaml,以使用Microsoft的Textbox与RadWatermarkText作为我的解决方法。崩溃已停止,但水印功能显然已消失

大约一年前,我从Telerik下载了一个主题项目,这样我可以使他们的控件看起来几乎和默认控件一样好。如果你们中有人想和我做同样的事情,那么可以在他们的下载中找到DateTimePicker.xaml


我发现Telerik控件的bug太多,不适合我的口味,所以我选择不继续通过订阅付费给它们修复bug。

我也遇到了同样的问题。您是否已向MSDN提交错误?如果没有,我可以。其他人也有同样的问题@jonperl,我刚刚在提交了一个。还有其他/更好的地方吗?谢谢你的链接。我很难在我们的主要项目之外复制这个,你有任何示例代码吗?我也很好奇你是否在使用Telerik控件?我向他们的论坛提交了一个问题,我也不能在测试项目中复制它。这与我们的Telerik控制有关,特别是RadNumericUpDown。部分原因还在于网络调用返回到网络线程,而不是Silverlight 5中的UI线程。听起来好像Telerik正在调查他们控制的问题。我还将使用Dispatcher.BeginInvoke包装所有RaisePropertyChanged调用,以返回到UI线程,因为我们的大多数绑定都是网络更新的。感谢您提供的信息。我正在使用MVVM