11

Questo è strano e, a questo punto, penso che possa avere qualcosa a che fare con la configurazione della mia macchina.INotifyDataErrorInfo ArgumentOutOfRangeException durante l'attivazione dell'evento ErrorsChanged

Fondamentalmente ho creato un'implementazione piuttosto standard di INotifyDataErrorInfo e in alcune circostanze, quando si genera l'evento ErrorsChanged, viene visualizzato ArgumentOutOfRangeException. Questa eccezione non contiene molte informazioni; mi dà ArgumentOutOfRangeException crossed a native/managed boundary più la descrizione standard ArgumentOutOfRangeException per quanto riguarda gli indici non negativi e le dimensioni di raccolta. Il InnerException è nullo. L'analisi dello stack è il seguente:

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) 

La ragione per cui ho citato la mia configurazione della macchina è perché ho provato un paio di soluzioni scritto sul blog (ad esempio here e here) e ottenere lo stesso problema (cioè non il mio codice, un'altra implementazione di INotifyDataErrorInfo) e non c'è alcuna menzione nei commenti di altri che ottengono il problema che faccio. Googling rivela un paio di colpi casuali che non aiutano.

Lo Stato richiesto è la seguente:

  1. ho inserito un valore per il controllo in modo che un errore di validazione viene effettuata. (Funziona correttamente, il testo dell'errore viene visualizzato nell'interfaccia utente come previsto).
  2. Quindi immettere un nuovo valore nel controllo in modo che la convalida abbia esito positivo e che gli errori vengano rimossi dalla raccolta errori (HasErrors restituisce false).
  3. ErrorsChanged viene generato per riflettere questa modifica con esito positivo senza errori e si verifica l'eccezione.

UPDATE: posso anche riprodurre se mi trasferisco a fuoco lontano da una TextBox che visualizza un errore di convalida.

Mi sto chiedendo se mi sono perso un service pack/aggiornamento o qualcosa del genere perché da quello che sto vedendo sembra che ci sia un errore piuttosto elementare nel codice framework e allo stesso tempo non sta accadendo per gli altri.

AGGIORNAMENTO: Sto utilizzando la versione RTM finale di Silverlight 4. NON un RC o Beta.

UPDATE: ottengo lo stesso risultato con il campione MS ufficiale fornito con this whitepaper.

UPDATE: Ho testato il mio codice e gli esempi citati su un'altra macchina e funziona correttamente. Mi piacerebbe davvero risolvere questo problema poiché è un po 'inquietante che non funzioni sulla mia macchina normale (che non ho avuto problemi fino ad ora). Qualche suggerimento su come poter rintracciare ciò che causa questo sarebbe apprezzato. Ho reinstallato Silverlight (Runtime, SDK, Toolkit) sul computer problematico e questo non ha risolto il problema.

UPDATE: Ecco lo stack di chiamate del codice quadro in cui l'eccezione si sta verificando ottiene abilitando il supporto server di origine con MS server di simboli:

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 

UPDATE: L'applicazione funziona benissimo (su la macchina del problema) senza un debugger collegato, funziona come previsto e non vengono invocati script di eccezioni non gestite (Questo mi ha fatto scappare, potrebbe essere collegato a VS?). Ho fatto una rapida ricerca su google per vedere se potevo trovare qualsiasi file di log del plugin Silverlight che potrebbe far luce qui senza fortuna, c'è un tale log?

+0

Ho lo stesso errore con SL5 su VS2012 –

+0

Hai mai trovato una risposta? Sto riscontrando problemi simili senza silverlight http://stackoverflow.com/questions/15824070/datepicker-value-set-error-binding-to-datasource –

+0

@kirsten No sorry, non ho trovato una soluzione. Potrebbe mai solo una riproduzione su quella scatola con un debugger collegato, quindi non ha mai trovato cosa fosse. –

risposta

0

Sono stato in grado di risolvere questo problema rimuovendo i collegamenti dell'applicazione Silverlight dal progetto Web e riaggiungendoli.

Spero che questo aiuti.

+1

purtroppo non ha aiutato, grazie comunque. –

+0

Mi spiace sentirlo. La cosa strana è che non ho controllato le modifiche, invece ho sperimentato annullando le modifiche in sospeso sul progetto web e ricostruendo con i file originali, con mia sorpresa il problema non è riapparso. Ho anche deselezionato (quindi ricontrollato) l'opzione Debug nel progetto web e lo stesso con i collegamenti RIA ai progetti in via di risoluzione. Ogni volta che ho fatto una ricostruzione dell'intera soluzione. È bizzarro perché sto riscontrando questo errore solo su macchine con nuove installazioni. – Chooksii

3

penso che sia vincolante errore nella TextBox modello tooltip

{Binding (Validation.Errors)[0].ErrorContent} 

Validation.Errors diventano vuote, ma il legame ancora non ha aggiornato i suoi riferimenti.

Si consiglia di ignorare l'eccezione. Deseleziona "Interrompi quando le eccezioni attraversano AppDomain o gestito ..." in Impostazioni di debug.

+0

L'ho provato sul mio computer e funziona come un fascino. Ero un po 'scettico sul fatto che questo potesse causare altri problemi su altri tipi di eccezioni, ma ho controllato 3 altre installazioni di VS 2010 sui miei colleghi e tutti avevano questa opzione deselezionata per impostazione predefinita. Quindi penso che questo sia davvero il modo giusto per risolvere questo problema. – Entrodus

+0

L'ho provato e non ha funzionato. – Shimmy

0

Esistono due diverse eccezioni possibili che vengono generate dal codice nativo in questa situazione. Nessuno dei due viene catturato da un tentativo ... bloccare il blocco, indipendentemente da ciò che si mette (o non si mette) nella presa.

Uno è "ArgumentOutOfRangeException ha attraversato un confine nativo/gestito". Per interrompere questa visualizzazione, è necessario deselezionare "Interruzione quando le eccezioni attraversano AppDomain o i confini gestiti/nativi (solo gestiti)" in Strumenti> Opzioni> Debug> Generale.

L'altro è solo "ArgumentOutOfRangeException". Per non vedere più questo, è necessario selezionare "Abilita solo il mio codice" in Strumenti> Opzioni> Debug> Generale.

Problemi correlati