Поврежденная куча в приложении Магазина Windows
У меня есть приложение для Магазина Windows, которое содержит ListBox
полно предметов. Существует также возможность фильтрации этих элементов на основе определенных параметров. Например:
foreach(var item in ItemsListBox.item)
{
ListBoxItem container = ItemsListBox.ItemContainerGenerator.ContainerFromItem(item) as ListBoxItem;
ItemDC context = (ItemDC)container.DataContext;
if(context.ShouldBeFiltered){
container.Visibility = Visibility.Collapsed;
}
else{
container.Visibility = Visibility.Visible;
}
}
Этот процесс фильтрации запускается переключателями, при этом один переключатель позволяет фильтровать элементы по свойству A, а другой переключатель - по свойству B.
Моя проблема заключается в том, что если я переключаюсь между вариантами фильтрации (нажимая туда и обратно между переключателями для тестирования), в конечном итоге приложение будет аварийно завершать работу с единственной информацией:
First-chance exception at 0x776A5624 (ntdll.dll) in MyApp.exe: 0xC0000374: A heap has been corrupted (parameters: 0x776C1378).
Unhandled exception at 0x776A5624 (ntdll.dll) in MyApp.exe: 0xC0000374: A heap has been corrupted (parameters: 0x776C1378).
Я полагаю, что это связано с сборкой мусора, проходящей между фильтрами, но я не совсем понимаю, как к этому подойти. Этот тип исключения, кажется, не пойман каким-либо Try/Catch
и не использует UnhandledException
события ловят это либо.
Есть ли что-то, что я делаю неправильно с точки зрения перехода туда и обратно между Visibility.Visible
а также Visility.Collapsed
быстро, что заставило бы сборщик мусора взбеситься и попытаться получить доступ к памяти, которая принадлежит чему-то другому?
Как мне подойти к такому исключению при работе с приложениями Магазина Windows?