Это связано с тем, что BitmapImage создается в потоке, отличном от потока пользовательского интерфейса, то есть в потоке, используемом Task.Run. Чтобы сделать BitmapImage доступным из другого потока, его необходимо заморозить. WPF предоставляет класс Freezable для этой цели.

ой XAML:

<ListView MouseDoubleClick="ImageList_MouseDoubleClick" Name="ImageList" Background="#353535" Grid.Row="2" Margin="0 5 0 0">
<ListView.ItemTemplate>
    <DataTemplate>
        <Grid Cursor="Hand" Width="200" Height="130" VerticalAlignment="Center" HorizontalAlignment="Left">
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition Height="30"/>
            </Grid.RowDefinitions>
            <Image Source="{Binding ImgPath}" Grid.Row="0"/>
            <Label FontSize="14" Foreground="White" Grid.Row="1" HorizontalAlignment="Center" Content="{Binding Name}"/>
        </Grid>
    </DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <WrapPanel Orientation="Horizontal" Width="{Binding Path=ActualWidth, ElementName=ImageList}"/>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>

И так я добавляю элементы в ListView:

String[] extensions = { "*.bmp", "*.png", "*.jpg", "*.jpeg", "*.tiff", "*.ico", "*.gif" };
List<String> images = new List<String>();
foreach (String ext in extensions)
{
    try
    {
        images = images.Concat(Directory.GetFiles(path, ext)).ToList();
    }
    catch { }
}
ObservableCollection<ImageBlock> ImageCollection = new ObservableCollection<ImageBlock>();
foreach (String img in images)
    this.ImageList.Items.Add(new ImageBlock(img, System.IO.Path.GetFileName(img)));

Этот код прекрасно работает с небольшим количеством изображений, но когда я пытаюсь открыть папку с более чем 100 картинками, моя программа вылетает. Что я делаю неправильно или что я могу сделать, чтобы оптимизировать свою программу?

Ответы на вопрос(2)

Ваш ответ на вопрос