Discussion:
System.Drawing.Image.FromFile . . .
(слишком старое сообщение для ответа)
SK
2005-09-03 21:37:18 UTC
Permalink
?????????? All!
??? ????? ???:
Private Im As System.Drawing.Image

Private Sub btnImage_Click(...)
Im = Image.FromFile("Something.jpg")
? ??? ????? ?? ?????????? (?? ?????)
End Sub

Private Sub btnRemoveImage_Click(...)
Im.Dispose()
File.Delete("Something.jpg")
??? ????? ??????????? Exception:
"The process cannot access the file "Somethin.jpg" because it is being used
by another process"
? ????? ???????: ??? ????????? ?? ??????, ?????? ???? ????????? ??????? ?
???? ??????????? Exception.
??? ?????? ? ???? ????????????
? ???: ? ????? PictureBox-? ???? ?????? Invalidated. ??? ??? ??????????
End Sub
SK
2005-09-04 19:27:22 UTC
Permalink
Здравствуй All!
Вот такой код:
Private Im As System.Drawing.Image

Private Sub btnImage_Click(...)
Im = Image.FromFile("Something.jpg")
. . .
End Sub

Private Sub btnRemoveImage_Click(...)
Im.Dispose()
File.Delete("Something.jpg")
Здесь выскакивает Exception:
"The process cannot access the file "Somethin.jpg" because it is being used
by another process"
И это происходит не всегда, иногда файл удаляется без проблем, а в
большинстве случаев выскакивает Exception. Можно это как то исправить?
Andrzej Novosiolov
2005-09-05 07:15:46 UTC
Permalink
Post by SK
Im = Image.FromFile("Something.jpg")
Im.Dispose()
File.Delete("Something.jpg")
"The process cannot access the file "Somethin.jpg" because it is being used
by another process"
И это происходит не всегда, иногда файл удаляется без проблем, а в
большинстве случаев выскакивает Exception. Можно это как то исправить?
Хм... Im.Dispose дожно бы хватать. Может быть, у тебя где-то незаметно
создаются клоны объекта Im, которые продолжают держать файл?

Два совета, которые могут помочь, а могут и нет:

1. Вместо Image.FromFile используй Image.FromStream, самостоятельно открывая
и закрывая файл.

2. Между Im.Dispose и File.Delete вставь Application.DoEvents - это часто
помогает отпустить неочевидные блокировки, если объекты ждут своей очереди
на отрисовку или что-нибудь в этом духе.

Andrzej
SK
2005-09-05 20:40:16 UTC
Permalink
Спасибо, FileStream выручил меня. Век не забуду :)
Post by Andrzej Novosiolov
Хм... Im.Dispose дожно бы хватать. Может быть, у тебя где-то незаметно
создаются клоны объекта Im, которые продолжают держать файл?
1. Вместо Image.FromFile используй Image.FromStream, самостоятельно
открывая
Post by Andrzej Novosiolov
и закрывая файл.
2. Между Im.Dispose и File.Delete вставь Application.DoEvents - это часто
помогает отпустить неочевидные блокировки, если объекты ждут своей очереди
на отрисовку или что-нибудь в этом духе.
Andrzej
Loading...