На этой странице происходит сбой.
Хотя мне не сделали исключения, я считаю, что сбой должна быть функция Setup
.
Он отлично работает, когда параметр songs
содержит около 300 элементов (я еще не проверял максимальное значение).
Однако он вылетает, когда есть 800 или более элементов (я также еще не тестировал этот минимум), из-за чего у меня было бы много AlbumView
, конструктор которых определен здесь.
В своем конструкторе он находит и устанавливает Cover
(который происходит от StorageItemThumbnail
) асинхронно. И я считаю, что поиск эскиза - это операция ввода-вывода. Причиной сбоя могут быть частые операции ввода-вывода. Но я не уверен в этом.
Может кто-нибудь дать мне совет, как исправить сбой?
Источником данных для songs
являются музыкальные файлы в папке на моем компьютере. Я сгруппировал их по подпапкам, и мое приложение отлично работает с отдельными подпапками. Он вылетает, когда я использую корневую папку всех своих музыкальных файлов, в которой содержится около 2800 файлов.
---Обновить---
Я только что подтвердил, что сбой был вызван частым вводом-выводом, закомментировав функцию FindThumbnail
.
Поэтому я пытаюсь исправить это, используя стратегию ленивой загрузки. Сначала я даю AlbumView.Cover
значение по умолчанию. А затем в событии Loaded
моего GridViewItem
я вызываю FindThumbnail()
.
private void DropShadowControl_Loaded(object sender, RoutedEventArgs e)
{
((sender as FrameworkElement).DataContext as AlbumView)?.FindThumbnail();
}
Дополнительный исходный код находится здесь.
У меня перестал вылетать, но, похоже, с этим проблема. У каждого DropShadowControl
должен быть соответствующий AlbumView
, но иногда я получаю null
. И я думаю, что это может быть причиной моей дальнейшей проблемы, так как большинство моих DropShadowControl
все еще показывают изображение по умолчанию после того, как они были загружены. Однако после перенаправления обратно на AlbumsPage
эти эскизы отображаются правильно.
И я установил привязку Cover
как OneWay
, что вы можете видеть из здесь.
В чем моя проблема?
1 ответ
После некоторых попыток я обнаружил, что моя первоначальная проблема связана с частыми операциями ввода-вывода.
Поэтому, чтобы избежать этого, мне нужно выполнять ленивую загрузку.
Проблема с моей предыдущей стратегией загрузки, упомянутая в обновленном вопросе, помещающая вещи в событие Loaded
, нехороша, потому что если мой DropShadowControl
не отображается, даже если он загружен, у него будет { {X2}}. И я полагаюсь на это, чтобы найти эскиз.
Итак, мне нужно событие when-my-control-стала-видимой-и-datacontext-available, то есть DataContextChanged
.
Поместив код в эту функцию / событие вместо Loaded
, моя проблема полностью решена.
Похожие вопросы
Новые вопросы
uwp
Универсальная платформа Windows - это общая программная платформа для всех устройств, работающих под управлением Windows 10, включая Desktop. Этот тег следует использовать для вопросов, касающихся разработки приложений UWP на любом из поддерживаемых семейств устройств. Могут быть добавлены другие теги, такие как используемые языки (C #, C ++ и т. Д.) И стиль API (Win32, WinRT и т. Д.). Упакованные приложения Win32 должны использовать тег Desktop-Bridge (возможно, в дополнение к UWP).