WPF C # 'System.OutOfMemoryException' после изменения источника изображения несколько раз - PullRequest
0 голосов
/ 11 марта 2019

У меня есть меню представления списка, которое изменит фоновое изображение сетки, но после изменения изображения примерно 5-6 раз программа зависает, и когда я закрывал программу, возникла ошибка System.OutOfMemoryException. Вот код, который я использую.

 private void ListViewMenu_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        switch (((ListViewItem)((ListView)sender).SelectedItem).Name)
        {
            case "Ground":
                imageMap.Source = new BitmapImage(new Uri(@"\main\1.png", UriKind.Relative));
                break;
            case "Second":
                imageMap.Source = new BitmapImage(new Uri(@"\main\2.png", UriKind.Relative));
                break;
            case "Third":
                imageMap.Source = new BitmapImage(new Uri(@"\main\3.png", UriKind.Relative));
                break;
            case "Fourth":
                imageMap.Source = new BitmapImage(new Uri(@"\main\4.png", UriKind.Relative));
                break;
            case "Fifth":
                imageMap.Source = new BitmapImage(new Uri(@"\main\5.png", UriKind.Relative));
                break;
            case "Sixth":
                imageMap.Source = new BitmapImage(new Uri(@"\main\6.png", UriKind.Relative));
                break;
            case "Seventh":
                imageMap.Source = new BitmapImage(new Uri(@"\main\7.png", UriKind.Relative));
                break;

            default:
                break;
        }
    }

1 Ответ

0 голосов
/ 11 марта 2019

Попробуйте это:

using System.GC;
...

private void ListViewMenu_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    GC.Collect();
    GC.WaitForPendingFinalizers();
    switch (((ListViewItem)((ListView)sender).SelectedItem).Name)
    {
        case "Ground":
            imageMap.Source = new BitmapImage(new Uri(@"\main\1.png", UriKind.Relative));
            break;
        case "Second":
            imageMap.Source = new BitmapImage(new Uri(@"\main\2.png", UriKind.Relative));
            break;
        case "Third":
            imageMap.Source = new BitmapImage(new Uri(@"\main\3.png", UriKind.Relative));
            break;
        case "Fourth":
            imageMap.Source = new BitmapImage(new Uri(@"\main\4.png", UriKind.Relative));
            break;
        case "Fifth":
            imageMap.Source = new BitmapImage(new Uri(@"\main\5.png", UriKind.Relative));
            break;
        case "Sixth":
            imageMap.Source = new BitmapImage(new Uri(@"\main\6.png", UriKind.Relative));
            break;
        case "Seventh":
            imageMap.Source = new BitmapImage(new Uri(@"\main\7.png", UriKind.Relative));
            break;

        default:
            break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...