ich diese Ausnahme erhalten, wenn ein Ereignisses Collection auf einer kundenspezifischen Implementierung von INotifyCollectionChanged Auslösung:System.InvalidOperationException ‚n‘ Index in der Ereigniserfassung Änderung ist für die Sammlung der Größe nicht gültig ‚0‘
Eine Ausnahme des Typs ‚System.InvalidOperationException‘ aufgetreten in PresentationFramework.dll wurde aber in Benutzercode
Zusätzliche Informationen nicht behandelt: ‚25‘ Index in Sammlung Änderungsereignis gültig für die Sammlung der Größe ‚0‘ ist es nicht.
Ein XAML-Datagrid ist als ItemsSource an die Auflistung gebunden.
Wie kann diese Ausnahme vermieden werden?
Der Code folgt:
public class MultiThreadObservableCollection<T> : ObservableCollection<T>
{
private readonly object lockObject;
public MultiThreadObservableCollection()
{
lockObject = new object();
}
private NotifyCollectionChangedEventHandler myPropertyChangedDelegate;
public override event NotifyCollectionChangedEventHandler CollectionChanged
{
add
{
lock (this.lockObject)
{
myPropertyChangedDelegate += value;
}
}
remove
{
lock (this.lockObject)
{
myPropertyChangedDelegate -= value;
}
}
}
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
var eh = this.myPropertyChangedDelegate;
if (eh != null)
{
Dispatcher dispatcher;
lock (this.lockObject)
{
dispatcher = (from NotifyCollectionChangedEventHandler nh in eh.GetInvocationList()
let dpo = nh.Target as DispatcherObject
where dpo != null
select dpo.Dispatcher).FirstOrDefault();
}
if (dispatcher != null && dispatcher.CheckAccess() == false)
{
dispatcher.Invoke(DispatcherPriority.DataBind, (Action)(() => this.OnCollectionChanged(e)));
}
else
{
lock (this.lockObject)
{
foreach (NotifyCollectionChangedEventHandler nh in eh.GetInvocationList())
{
nh.Invoke(this, e);
}
}
}
}
}
Der Fehler in der folgenden Zeile auftritt:
nh.Invoke(this, e);
Dank!