Прерывистое исключение выдается из CollectionViewProxy, внутреннего типа WPF - PullRequest
0 голосов
/ 24 июня 2019

Исключение, о котором идет речь, обычно встречается, когда программа изменяет коллекцию из другого потока:

System.NotSupportedException: этот тип CollectionView не поддерживает изменения в свой SourceCollection из потока, отличного отпоток диспетчера.

Но это не тот случай, когда изменения вносятся в основной поток. Рассматриваемый CollectionView является моим собственным созданием, которое поддерживает поддержку изменений между потоками.

После исследования я обнаружил, что исключение на самом деле выдается CollectionViewProxy объект, один из которых создан внутри WPF для обтекания представления моей коллекции.

Конструктор этого типа устанавливает флаг с именем ShouldProcessCollectionChanged в значение false, не позволяя себе обрабатывать изменение коллекциисобытия (в OnCollectionChanged).В 99% случаев это работает правильно, но каким-то образом эта проверка очень редко проходит, даже если прокси-сервер имеет NOT , у которого установлен этот флаг (когда происходит сбой, флаги IsDynamic | NeedsRefresh).Когда проверка проходит, всегда выдается исключение.

Кто-нибудь видел это раньше?Все, о чем я могу думать, - это то, что происходит какая-то борьба, когда один поток изменяет флаги прокси (возможно, NeedsRefresh), когда другой их читает.Но целочисленные операции должны быть атомарными в .Net , и, если это пойдет не так, это наверняка вызовет проблемы и в других местах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...