Priya-Kiko Ответов: 1

Утилизация ресурса изображения


Всем Привет,

Я делаю R&ампер;D с распоряжаться. У меня есть сомнения в случае форм по распоряжению ресурсом изображения.

namespace DisposeTry
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Image mimg = new Bitmap("repository.png"))
            image1.Image = mimg;
        }
    }
}


Пожалуйста, уточните, что это правильный путь.

Что я уже пробовал:

namespace DisposeTry
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            using (Image mimg = new Bitmap("repository.png"))
                image1.Image = mimg;   // Obvious error
        }
    }
}

1 Ответов

Рейтинг:
7

OriginalGriff

Вы не можете избавиться от чего - либо, пока оно используется - это просто глупо, - и изображение в PictureBox или подобном элементе управления используется до тех пор, пока PictureBox потенциально может быть виден.
Если вы создаете образ, и он нужен для жизни формы (иначе зачем создавать его в событии Load), то вы можете утилизировать его в событии FormClosed или при его замене другим изображением для отображения.
Если форма является вашей основной формой, то вам не нужно ничего делать в обработчике событий FormClosed, он будет удален для вас, когда форма закроется, так как это завершит работу приложения.


Priya-Kiko

Спасибо за ответ. Таким образом, это просто означает отслеживать изображения или такие ресурсы, созданные в форме (не обязательно в форме загрузки), и утилизировать их в событии dispose или close, верно ?

OriginalGriff

В принципе, да. Но помните, что когда вы "отслеживаете" вещи, это считается ссылкой, поэтому вам нужно избавиться и от "следов", когда вы избавляетесь от вещей.
В приведенном примере PictureBox предоставляет механизм отслеживания, и все, что вам нужно сделать, это избавиться от изображения непосредственно перед тем, как заменить его новым.

И как я уже сказал: Если приложение закрывается,это все равно избавит вас от всего.

Priya-Kiko

Спасибо.

OriginalGriff

Пожалуйста!