Silverlight 5 AccessViolationException - PullRequest
       11

Silverlight 5 AccessViolationException

3 голосов
/ 13 декабря 2011

Я установил инструменты Silverlight 5 VS 2010 и 64-разрядную среду выполнения Developer, и теперь я получаю исключение System.AccessViolationException при выполнении определенного действия. Проекты все еще Silverlight 4, я не обновлял их. Я проверил на компьютере другого разработчика (у которого еще не установлена ​​SL5), что тот же код все еще работает в SL4. Сообщение: {System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.} и убивает IE. Это происходит после подтверждения удаления. Кнопка ОК в ChildWindow нажата, и моя точка останова в событии действия ok не достигнута (другие подтверждения удаления, которые я использую, используя подобный код, не имеют этой проблемы). Трассировка стека указывает на

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(object BindingState = {System.Windows.Data.Debugging.BindingDebugState}) Line 1 + 0x11 bytes Unknown"

Я удалил стиль из элементов управления и App.xaml и все еще получаю исключение ... На этот раз он указывает на тему Telerik "The debugger will ask the user to find the file: Telerik.Windows.Controls.Input;Component\Themes\Office\Black\DateTimePicker.xaml"

Мой коллега упомянул, что он видел такое же исключение в Silverlight, когда отправлял какой-то искаженный XAML на XMLWriter.

Я добавлю больше информации, когда найду ее.

Кто-нибудь знает, что искать именно в этом файле стиля?

РЕДАКТИРОВАТЬ: я видел это в нескольких местах, а не только подключен к DateTimePicker. Я написал это в http://forums.silverlight.net/p/245247/613094.aspx/1?p=True&t=634600762692144367.

Я также получаю это исключение с помощью этой трассировки стека. Это происходит не каждый раз, но это когда я изменяю ширину прямоугольника с помощью RadNumericUpDown и вызывается RaisePropertyChanged ("Width"):>

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: это кажется связанным: http://forums.silverlight.net/p/178858/402638.aspx

РЕДАКТИРОВАТЬ # 3: Я не смог воспроизвести это за пределами моего проекта. Я также не остановил это, комментируя UserControls и разделы кода. Я даже удалил привязку из XAML и RadNumericUpDown, к которому он, похоже, подключен. Я еще не удалил наши пользовательские стили, может быть, это что-то, что можно попробовать дальше ... Кто-нибудь знает, как я могу воспроизвести этот и работать оттуда?

РЕДАКТИРОВАТЬ # 4: Они исправили последнюю версию в соответствии с: http://10rem.net/blog/2012/05/09/silverlight-51104110-released-today

Ответы [ 5 ]

3 голосов
/ 15 декабря 2011

Я вижу это исключение при привязке данных к скрытому элементу.У нас есть некоторые поля, которые являются видимыми или нет на основе некоторой привязки данных, но оба эти поля обновляются с помощью другой привязки данных.Когда RaisePropertyChanged запускается в скрытом поле, мы получаем AccessViolationException.Мне пришлось добавить некоторые проверки в мой код, чтобы подавить RaisePropertyChanged, когда элемент управления не виден.

2 голосов
/ 28 декабря 2011

Эта проблема возникла после обновления до Silverlight 5. Исключение AccessViolationException при установке (отправитель как RadComboBox) .ItemsSources во время события загрузки различных элементов управления. Эту ошибку было сложно воспроизвести и не всегда выдавали при одинаковых условиях испытаний. Тем не менее, я считаю, что лучше всего обойтись следующим образом:

Silverlight 4:

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

Проблемы исчезли, когда я добавил ...

Silverlight 5:

(sender as RadComboBox).UpdateLayout();

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

Я уверен, что в лучшем случае это "обходной путь", и надеюсь услышать лучшее решение. Но сейчас мы вернулись к работе!

1 голос
/ 28 марта 2012

Я обновил DateTimePicker.xaml для своей пользовательской темы, чтобы использовать Microsoft Textbox против RadWatermarkText в качестве моего обходного пути. Сбой прекратился, однако функция водяного знака, очевидно, исчезла.

Я загрузил тематический проект из Telerik около года назад, чтобы их элементы управления выглядели почти так же хорошо, как и стандартные. Если кто-то из вас захочет сделать то же самое, что и я, вы найдете файл DateTimePicker.xaml в их загрузке.

Я обнаружил, что элементы управления Telerik слишком глючные на мой вкус, поэтому я решил не платить им постоянно за исправления ошибок по подписке.

1 голос
/ 20 января 2012

Существует сообщение об ошибке Microsoft Connect для той же проблемы, которую мы представили пару часов назад.Пожалуйста, проголосуйте, чтобы исправить это как можно скорее.

RadComboBox уже содержит обходной путь, поэтому, пожалуйста, проверьте последнюю внутреннюю сборку под своей учетной записью и сообщите нам, если проблема не устранена. Вот ветка форума Telerik о той же проблеме.

Надеюсь, это поможет.

0 голосов
/ 11 января 2012

Я наконец разыскал свою конкретную проблему.Это происходило только с элементом после моего унаследованного ChildWindow.

У меня был этот хак, который пытался исправить ошибку, которая была у меня несколько месяцев назад.Как только я удалил его, исключение прекратилось.Я почти уверен, что мне больше не нужен взлом из-за улучшений в других местах, так что это двойной бонус!Я пытался в нескольких местах перенаправить вызовы обратно в поток пользовательского интерфейса, но что-то в таймере (которое должно быть в потоке пользовательского интерфейса) не позволяло этого (это моя теория).Удачи всем, кто ищет ответ.+1 для тех, кто пока что!

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 в отдельном проекте.Так что этот ответ не так полезен.

...