ComboBox слишком долго открывается (ошибка COMException)

Вот ситуация моей проблемы:
у меня есть ListBox с двумя предметами типа MyClass,
MyClass имеет List<Column> коллекция.
Где-то еще в том же окне у меня есть ComboBox со столбцами выбранного MyClass.ColumnCollection как ItemsSource.

Вот где начинается проблема:
В первый раз, когда я открываю всплывающее окно ComboBox, все идет хорошо.
Когда я выбираю другой элемент в ListBox (а также меняю источник ComboBox), для открытия всплывающего окна требуется больше 10 секунд. Если это займет более 60 секунд, я получаю следующую ошибку:

The CLR has been unable to transition from COM context 0xf13d90 to COM context 0xf13fe0 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.

Я погуглил за ошибку, и везде, куда бы я ни пришел, это был совет, чтобы отключить сброс ContextSwitchDeadlocks, который не является решением вообще!

Я посмотрел дальше в это и нашел следующее COMException:

An event was unable to invoke any of the subscribers (Exception from HRESULT: 0x80040201)

Я не использую темы / задачи или что-то еще, просто привязка к ComboBox,
Я попытался обновить ItemsSource при выборе другого элемента, но это не имело никакого значения, так как он уже был установлен правильно.

Я попытался Google для этой ошибки, но, похоже, нет решения этой проблемы.
Microsoft предложила исправление для этого, но нет загрузки.

Код для ListBox:

    <ListBox Margin="468,30,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Height="420" Width="410"
                            ItemsSource="{Binding ElementName=Window, Path=MyClassItems}"
                            SelectedItem="{Binding ElementName=Window, Path=MyClassItem}"
                            DisplayMemberPath="Name" />

Код для ComboBox:

        <ComboBox Margin="580,490,0,0" Width="300"
                            VerticalAlignment="Top" HorizontalAlignment="Left" DisplayMemberPath="Name"
                            ItemsSource="{Binding ElementName=Window, Path=MyClassItem.Columns}"
                            SelectedItem="{Binding ElementName=Window, Path=MyClassItem.Column, Mode=OneWay}" SelectionChanged="SelectedColumn_SelectionChanged" />

Событие SelectionChanged:

MyClassItem.Column = (sender as Combobox).SelectedValue as Column;

Вопросы:
Кто-нибудь знает, как предотвратить COMException?

Обновление 1:
Добавлены некоторые примеры кода Xaml

Обновление 2:
Упрощенный вопрос (ы)

Обновление 3:
Я обнаружил, что настоящая ошибка - исключение COM.
Обновил мой вопрос новой информацией.

Обновление 4:
Все объекты в ListBox являются полными и присутствуют в памяти, так что нет никаких запросов, идущих один. Кроме того, время ожидания всегда происходит независимо от того, заполнен ли comboBox 1 или 100 элементами. (Я проверял оба).

0 ответов

Другие вопросы по тегам