You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Originally posted by Yoooi0 November 21, 2021
There seems to be an issue with thread safety in BindableCollection.
When two threads modify the collection at the same time, one calling ClearItems, the other calling RemoveItem, it can cause OnCollectionChanging to throw an exception.
System.Reflection.TargetInvocationException: "An error occurred while dispatching a call to the UI Thread"
Inner Exception
ArgumentOutOfRangeException: "Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')"
at Stylet.Execute.OnUIThreadSync(Action action)
at Stylet.BindableCollection`1.RemoveItem(Int32 index)
at System.Collections.ObjectModel.Collection`1.Remove(T item)
Example timeline:
Create BindableCollection with 1 item
Thread 1 calls collection.ClearItems()
Thread 1 enters Execute.OnUIThreadSync
Thread 2 calls collection.Remove(firstItem), this calls RemoveItem with index argument set to 0
Thread 2 waits for thread 1
Thread 1 clears the collection by calling base.ClearItems()
Thread 2 enters Execute.OnUIThreadSync
Thread 2 throws exception when calling OnCollectionChanging because the item at index 0 does not exist anymore
The text was updated successfully, but these errors were encountered:
Discussed in #306
Originally posted by Yoooi0 November 21, 2021
There seems to be an issue with thread safety in BindableCollection.
When two threads modify the collection at the same time, one calling ClearItems, the other calling RemoveItem, it can cause
OnCollectionChanging
to throw an exception.Example timeline:
collection.ClearItems()
Execute.OnUIThreadSync
collection.Remove(firstItem)
, this callsRemoveItem
withindex
argument set to0
base.ClearItems()
Execute.OnUIThreadSync
OnCollectionChanging
because the item at index 0 does not exist anymoreThe text was updated successfully, but these errors were encountered: