2009-04-16 7 views
1

나는 tempImage.jpg라는 파일을 열고 PictureBox에 양식에 표시하고 있습니다. 그런 다음 Clear라는 버튼을 클릭하면 PictureBox2.Image = Nothing을 사용하여 PictureBox에서 파일이 제거되지만 열린 상태로 잠겨있어 파일을 삭제할 수 없습니다. 어떻게 삭제할 수 있습니까? VB.NET 및 양식 응용 프로그램을 사용하고 있습니다.VB.NET 열린 파일을 어떻게 해제합니까?

감사

+0

이미지를 여는 코드를 표시한다. –

답변

7

PictureBox2.Image = Nothing을 사용하면 리소스를 해제하기 전에 가비지 수집기가 리소스를 완료 할 때까지 기다리는 중입니다. vb.net

이 사용에 해당하는이 파일

'to use the image 
    Dim fs As New IO.FileStream("c:\foopic.jpg", IO.FileMode.Open, IO.FileAccess.Read) 
    PictureBox1.Image = Image.FromStream(fs) 

    'to release the image 
    PictureBox1.Image = Nothing 
    fs.Close() 
+1

+1 왜 * 왜 * 작동하는지 설명. –

+0

안녕하세요, Jon,'process'를 사용하여 열어 본 파일을 공개하지 않는 것으로 보이는'.msg' 파일을 사용하여이 작업을 시도했습니다. –

3

당신이 Image.FromFile를 사용하는 경우, 당신은 이미지에() .Dispose를 호출해야합니다. 그것을 지우러 간다면 ...

Image currentImage = pictureBox.Image 

pictureBox.Image = Nothing 

currentImage.Dispose() 

그 파일을 출시 할 예정입니다.

1

제어권을 : 당신은 즉시 해제하려면, 그래서 당신은 이미지를 처리 ​​할 필요가 내가 C에서 무엇을 할 것입니까?

using(filestream fs = new filestream) 
{ 

//whatever you want to do in here 


} 

//closes after your done 
0

Image tmp = PictureBox2.Image 
PictureBox2.Image = Nothing 
tmp.Dispose() 
0

아직 충분한 (경험 점수가 충분하지 않습니다) 답변을 드릴 수는 없으므로 어 "vb.net에서 사용하는 것과 같습니다."

예, .Net 2.0 이상에서는 "사용"을 사용할 수 있습니다. 의 객체가 마지막으로 finally 블록에서 스트림의 폐쇄를 추가

Dim fs As System.IO.FileStream = Nothing 
    Try 
     'Do stuff 
    Finally 
     'Always check to make sure the object isnt nothing (to avoid nullreference exceptions) 
     If fs IsNot Nothing Then 
      fs.Close() 
      fs = Nothing 
     End If 
    End Try 

를 차단하면 닷넷 1.0에서 및 그러나 1.1, 당신은 폐기해야는 반대로이 (상관없이 폐쇄하지 얻을 것이다 보장 연결이 열리면 스트림이 닫히기 전에 코드 폭탄이 튀어 나와 스트림이 열리고 파일이 잠긴다.

관련 문제