MVVM형태로 프로그램을 작성중이었는데 단순이 이미지를 디스플레이하는 로직이었고
다음과 같이 소스를 구성했다.
View
<ContentControl>
<Image Source="{Binding IMAGE}"/>
</ContentControl>
ViewModel
private string _image;
public string IMAGE
{
get { return _image; }
set { _image = value; }
}
생성자
{
IMAGE = 파일절대주소;
}
이미지는 정상적으로 출력되었고 문제없다고 생각했다.
이후 추가적으로 웹으로 이미지를 다운받고 기존 이미지를 삭제하는 로직을 추가했더니
삭제 과정에서 아래와 같이 Exception이 발생하였다.
System.IO.IOException: The process cannot access the file because it is being used by another process.
이미지에 영향을 미치는 변수는 해당 소스의 IMAGE밖에 없다고 생각했고
처음으로 시도해본 방법은 IMAGE에 다른 이미지 절대주소를 대입하고
기존 삭제할 이미지를 삭제해보려했으나 다른 이미지를 보여주고 있음에도 실패하였다.
이후에도 Stackoverflow의 다른 글들을 참조해보며 시도해보던중에
아래와 같이 데이터를 넣는 방법이 있어 시도해보았다.
ViewModel
생성자
{
BitmapImage image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = new Uri(파일절대주소);
image.EndInit();
IMAGE = image;
}
해당코드로 변경하니 로드후에도 자유롭게 이미지 삭제가 가능했다.
image.CacheOption = BitmapCacheOption.OnLoad;
해당 부분이 주요하게 작용하는것으로 보인다.
우선 동작은 정상적이지만 메모리 누수등이 될 수 있는지 추가검토가 필요하다.
좋은 글 감사합니다. 자주 올게요 :)