Это странно, и на данный момент я думаю, что это может иметь какое-то отношение к конфигурации моих машин.
В основном я создал довольно стандартную реализацию INotifyDataErrorInfo
, и в определенных обстоятельствах,при поднятии события ErrorsChanged
я получаю ArgumentOutOfRangeException
.Это исключение не содержит много информации;это дает мне ArgumentOutOfRangeException crossed a native/managed boundary
плюс стандартное ArgumentOutOfRangeException
описание относительно неотрицательных индексов и размеров коллекции.InnerException
является нулевым.Трассировка стека выглядит следующим образом:
at System.ThrowHelper
.ThrowArgumentOutOfRangeException(ExceptionArgument argument,
ExceptionResource resource)
at System.ThrowHelper.ThrowArgumentOutOfRangeException()
at System.Collections.Generic.List`1.get_Item(Int32 index)
at System.Collections.ObjectModel.Collection`1.get_Item(Int32 index)
at System.Collections.ObjectModel.ReadOnlyCollection`1.get_Item(Int32 index)
Причина, по которой я упоминаю конфигурацию своего компьютера, заключается в том, что я попробовал пару решений, опубликованных в блогах (например, здесь и здесь ) и получаю ту же проблему (т.е. не мой код, а другую реализацию INotifyDataErrorInfo), и в комментариях нет упоминаний о других проблемах, с которыми я сталкиваюсь.При поиске в Google появляется пара случайных попаданий, которые не помогают.
Требуется следующее состояние:
- Я ввел значение в элемент управления, так что ошибка проверкисрабатывает.(Это работает нормально, текст ошибки отображается в пользовательском интерфейсе, как и ожидалось).
- Затем я ввожу новое значение в элемент управления, чтобы проверка прошла успешно и ошибки были удалены из коллекции ошибок (HasErrors возвращает false).
- ErrorsChanged поднимается, чтобы отразить это изменение для успешной проверки без ошибок, и возникает исключение.
ОБНОВЛЕНИЕ: Я также могу воспроизвести, еслиЯ убираю фокус с TextBox, отображающего ошибку проверки.
Мне интересно, пропустил ли я пакет обновления / обновление или что-то еще, потому что из того, что я вижу, выглядит довольноэлементарная ошибка в коде фреймворка, и в то же время ее не происходит для других.
ОБНОВЛЕНИЕ: Я использую окончательную RTM-версию Silverlight 4. НЕ RC или Beta.
ОБНОВЛЕНИЕ: Я получаю тот же результат с официальным образцом MS, поставляемым с этим техническим документом .
ОБНОВЛЕНИЕ: У меня сейчаспроверил мой код и упомянутые примеры на другой машине, и он отлично работает.Я все еще очень хотел бы решить эту проблему, так как немного тревожит, что она не работает на моей обычной машине (с которой у меня до сих пор не было проблем).Будем благодарны за любые предложения относительно того, как я могу отследить, что является причиной этого.Я переустановил Silverlight (Runtime, SDK, Toolkit) на проблемном компьютере, и это не решило проблему.
UPDATE: Вот стек вызовов кода платформы, гдепроисходит исключение, полученное при включении поддержки исходного сервера с сервером символов MS:
mscorlib.dll!System.ThrowHelper.ThrowArgumentOutOfRangeException(System.ExceptionArgument argument, System.ExceptionResource resource) + 0x40 bytes
mscorlib.dll!System.ThrowHelper.ThrowArgumentOutOfRangeException() + 0x10 bytes
mscorlib.dll!System.Collections.Generic.List<System.Windows.Controls.ValidationError>.this[int].get(int index = 0) + 0x13 bytes
mscorlib.dll!System.Collections.ObjectModel.Collection<System.Windows.Controls.ValidationError>.this[int].get(int index) + 0x2e bytes
mscorlib.dll!System.Collections.ObjectModel.ReadOnlyCollection<System.Windows.Controls.ValidationError>.this[int].get(int index) + 0x2e bytes
[Native to Managed Transition]
[Managed to Native Transition]
System.Windows.dll!System.Windows.IndexerListener.Value.get() + 0xc3 bytes
System.Windows.dll!System.Windows.IndexerPathStep.Value.get() + 0x17 bytes
System.Windows.dll!System.Windows.PropertyPathListener.RaisePropertyPathStepChanged(System.Windows.PropertyPathStep source = {System.Windows.IndexerPathStep}) + 0x17 bytes
System.Windows.dll!System.Windows.IndexerPathStep.RaisePropertyPathStepChanged(System.Windows.PropertyListener source) + 0xe bytes
System.Windows.dll!System.Windows.IndexerListener.SourcePropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs args) + 0xea bytes
System.Windows.dll!System.Windows.Data.WeakPropertyChangedListener.PropertyChangedCallback(object sender, System.ComponentModel.PropertyChangedEventArgs args) + 0x3d bytes
System.Windows.dll!System.Collections.ObjectModel.ReadOnlyObservableCollection<System.__Canon>.OnPropertyChanged(System.ComponentModel.PropertyChangedEventArgs args) + 0x17 bytes
System.Windows.dll!System.Collections.ObjectModel.ReadOnlyObservableCollection<System.__Canon>.HandlePropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + 0xe bytes
System.Windows.dll!System.Collections.ObjectModel.ObservableCollection<System.Windows.Controls.ValidationError>.OnPropertyChanged(System.ComponentModel.PropertyChangedEventArgs e) + 0x37 bytes
System.Windows.dll!System.Collections.ObjectModel.ObservableCollection<System.Windows.Controls.ValidationError>.RemoveItem(int index = 0) + 0x79 bytes
mscorlib.dll!System.Collections.ObjectModel.Collection<System.Windows.Controls.ValidationError>.Remove(System.Windows.Controls.ValidationError item) + 0x75 bytes
System.Windows.dll!System.Windows.Controls.Validation.RemoveValidationError(System.Windows.FrameworkElement fe = {System.Windows.Controls.TextBox}, System.Windows.Controls.ValidationError error) + 0x40 bytes
System.Windows.dll!System.Windows.Data.BindingExpression.RemoveErrorFromTarget(System.Windows.Controls.ValidationError error) + 0x48 bytes
System.Windows.dll!System.Windows.Data.BindingExpression.NotifyOldDataErrorInfos(System.Collections.ObjectModel.Collection<System.Windows.Controls.ValidationError> validationErrors) + 0x73 bytes
System.Windows.dll!System.Windows.Data.BindingExpression.NotifyOldDataErrorInfos(bool isNotifyChildDataErrorInfo) + 0x25 bytes
System.Windows.dll!System.Windows.Data.BindingExpression.NotifyDataErrorInfo_ErrorsChanged(object sender, System.ComponentModel.DataErrorsChangedEventArgs e) + 0xad bytes
ОБНОВЛЕНИЕ: Приложение работает нормально (на проблемной машине) без подключенного отладчика, работает должным образом исценарии необработанных исключений не вызываются (это меня как-то озадачило, может ли это быть связано с VS?).У меня был быстрый поиск в Google, чтобы увидеть, смогу ли я найти какой-нибудь файл журнала плагина Silverlight, который может пролить свет здесь без удачи, есть ли такой журнал?