[ C# ] Image.FromFile()을 이용하여 이미지를 불러 올때 락(lock) 문제 해결 방법
포스트
취소

[ C# ] Image.FromFile()을 이용하여 이미지를 불러 올때 락(lock) 문제 해결 방법

HitCount


Contents


Image.FromFile()을 이용하여 이미지를 불러 올때 락(lock) 문제 해결 방법

C#에서 이미지를 불러올때 Image.FromFile()를 자주 이용하실텐데, 이렇게 불러온 경우 객체를 Dispose() 함수를 호출하기 전까지는 파일에 대한 제어권을 넘겨 받을 수가 없습니다. 대표적인 예로 Picturebox에서 불러오고 해당 파일을 수정하고 저장하려 할때 ERROR_SHARING_VIOLATION(0x20) 오류가 발생할 것입니다.

이를 해결하기 위한 방법은 아래와 같습니다.

  • 락(lock)
    1
    
    pbxImage.Image = Image.FromFile("ImageFile.png");
    
  • 언락(unlock)
    1
    2
    3
    4
    
    using (FileStream fs = new FileStream(FileOpenDialog.FileName, FileMode.Open, FileAccess.Read))
    {
     pbxImage.Image = FromStream(fs);
    }
    

    또는

    1
    2
    3
    4
    
    FileStream fs = new FileStream(FileOpenDialog.FileName, FileMode.Open, FileAccess.Read);
    pbxImage.Image = FromStream(fs);
    fs.Close();
    fs.Dispose();
    

와 같이 해주면 안전하게 PictureBox에 그린 이후 곧장 다른 작업을 하실 수 있습니다.

참고로 ico 파일인 경우에는 아래와 같이 작업을 해주시면 됩니다.

1
2
3
4
5
6
using (FileStream fs = new FileStream(FileOpenDialog.FileName, FileMode.Open, FileAccess.Read))
{
   Icon myIcon = new System.Drawing.Icon(fs);
   pbxIcon.SizeMode = PictureBoxSizeMode.StretchImage;
   pbxIcon.Image = myIcon.ToBitmap();
}

(※ 여기서 pbxImage와 pbxIcon은 PictureBox 객체 입니다.)

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.