powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не удаляется файл. Кто держит ресурсы?
4 сообщений из 4, страница 1 из 1
Не удаляется файл. Кто держит ресурсы?
    #32869882
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть форма, на ней листбокс, пиктуребокс и кнопка "удалить".
При загрузке формы в листбоксе отображается список файлов папки "img" (картинки там лежат). При перемещении по списку выбранная картинка отображается в пиктуребоксе. При нажатии на кнопку файл должен быть удалён.
НО почему-то это не всегда происходит, иногда вылетает ошибка доступа к файлу, особенно если не поочереди удалять, а побегать по списку взад-вперёд.

Прилагаю демо-проект. Скопируйте десяток-другой картинок в папку "img" и запустите проект. Для занятых привожу код здесь:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
private void Form1_Load(object sender, System.EventArgs e)
		{
			ShowFiles();	
		}
		
		private void ShowFiles()
		{
			this.listBox1.Items.Clear();
			foreach (string filename in Directory.GetFiles("img"))
			{
				this.listBox1.Items.Add(filename);
			}
		}

		private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
		{
			im = Image.FromFile(this.listBox1.SelectedItem.ToString());
			this.pictureBox1.Image = im;
		}

		private void delete_btn_Click(object sender, System.EventArgs e)
		{
			try
			{
				if(File.Exists(this.listBox1.SelectedItem.ToString()))
				{
					this.pictureBox1.Image.Dispose();
					this.pictureBox1.Image = null;
					File.Delete(this.listBox1.SelectedItem.ToString());
					ShowFiles();
				}
			}
			catch(Exception ex)
			{
				MessageBox.Show(ex.Message);
			}
		}
-------------------------------------------------------------------------
Нет худа без добра, да и добро без худа - чудо.
...
Рейтинг: 0 / 0
Не удаляется файл. Кто держит ресурсы?
    #32870003
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да ошибка вылетает, поменял код вот так, вроде ошибок не заметил

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
private void delete_btn_Click(object sender, System.EventArgs e)
		{
			try
			{
				if(File.Exists(this.listBox1.SelectedItem.ToString()))
				{
					this.pictureBox1.Image.Dispose();
					this.pictureBox1.Image = null;
					GC.Collect ();
					GC.WaitForPendingFinalizers();
					File.Delete(this.listBox1.SelectedItem.ToString());
					ShowFiles();
				}
			}
			catch(Exception ex)
			{
				MessageBox.Show(ex.Message);
			}
		}
...
Рейтинг: 0 / 0
Не удаляется файл. Кто держит ресурсы?
    #32870045
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, так работает.
Причём самое главное не забыть GC.WaitForPendingFinalizers(); написать.
Просто GC.Collect (); недостаточно.

Бааальшое спасибо!

-------------------------------------------------------------------------
Нет худа без добра, да и добро без худа - чудо.
...
Рейтинг: 0 / 0
Не удаляется файл. Кто держит ресурсы?
    #32870132
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234Да, так работает.
Причём самое главное не забыть GC.WaitForPendingFinalizers(); написать.
Просто GC.Collect (); недостаточно.
.

ну это понятно, это типа дождаться окончания выполнения потока thread.Start(); thread.Join()
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не удаляется файл. Кто держит ресурсы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]