Исключение, о котором идет речь, обычно встречается, когда программа изменяет коллекцию из другого потока:
System.NotSupportedException: этот тип CollectionView не поддерживает изменения в свой SourceCollection из потока, отличного отпоток диспетчера.
Но это не тот случай, когда изменения вносятся в основной поток. Рассматриваемый CollectionView является моим собственным созданием, которое поддерживает поддержку изменений между потоками.
После исследования я обнаружил, что исключение на самом деле выдается CollectionViewProxy
объект, один из которых создан внутри WPF для обтекания представления моей коллекции.
Конструктор этого типа устанавливает флаг с именем ShouldProcessCollectionChanged
в значение false, не позволяя себе обрабатывать изменение коллекциисобытия (в OnCollectionChanged
).В 99% случаев это работает правильно, но каким-то образом эта проверка очень редко проходит, даже если прокси-сервер имеет NOT , у которого установлен этот флаг (когда происходит сбой, флаги IsDynamic | NeedsRefresh
).Когда проверка проходит, всегда выдается исключение.
Кто-нибудь видел это раньше?Все, о чем я могу думать, - это то, что происходит какая-то борьба, когда один поток изменяет флаги прокси (возможно, NeedsRefresh
), когда другой их читает.Но целочисленные операции должны быть атомарными в .Net , и, если это пойдет не так, это наверняка вызовет проблемы и в других местах.