我有一个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应用商店应用时,如何处理此类异常?