Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не удаляется файл. Кто держит ресурсы? / 4 сообщений из 4, страница 1 из 1
18.01.2005, 12:58
    #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
18.01.2005, 13:28
    #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
18.01.2005, 13:41
    #32870045
M234
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляется файл. Кто держит ресурсы?
Да, так работает.
Причём самое главное не забыть GC.WaitForPendingFinalizers(); написать.
Просто GC.Collect (); недостаточно.

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

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

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


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