2014-09-24 3 views
0

내 문제는 폐쇄 된 주제와 관련이 있다고 생각합니다. How can I stop <Image Source="file path"/> process?. 그 주제는 끝났고 그것에 대한 대답은 나를 위해 작동하지 않습니다.닫는 동안 파일 삭제

내 문제는 File.Delete (경로)를 사용할 수 없다는 사실입니다. 예외를 제공합니다. "추가 정보 : 프로세스가 'C : \ Images \ 2014_09 \ auto_12_53_55_beszelri_modified.jpg'파일에 액세스 할 수 없습니다. 다른 프로세스에서이 파일을 사용하고 있기 때문입니다."

Window_OnClosed 이벤트에서이 메서드를 호출하려고합니다. 아이디어는 창을 닫을 때 이미지의 jpg 파일을 삭제해야한다는 것입니다. 이 파일의 경로는 WPF의 이미지 컨트롤 소스입니다. 해당 메서드를 호출하기 전에 null로 설정된 이미지 원본을 시도했지만 작동하지 않습니다. 창을 닫은 후 또는 닫을 때 어떻게 파일을 삭제할 수 있습니까? 그 장소에서 다른 파일을 닫으려고했을 때 그 파일은 성공적이었습니다.

이것은 닫힌 이벤트의 코드입니다. CreateFileString 메서드는 경로를 만듭니다.

private void ImageWindow_OnClosed(object sender, EventArgs e) 
{ 
    var c = CarImage.Source.ToString(); 
    var a = CreateFileString(c); 
    CarImage.Source = null; 

    File.Delete(a); 
} 
+0

는 것을'Image'는 UI에 표시되어 있습니까? – Sheridan

+0

XAML에서 이미지를 만듭니다. OnLoaded 이벤트에서 설정 한 소스. 이미지가 창에 표시되며이를 조작 할 수 있습니다 (일부 모양 그리기). – darson1991

+0

또한 확인하십시오 [답변] (http://stackoverflow.com/questions/1811101/wpf-application-freeing-resources-images) –

답변

1

일부 성가신 이유로 WPF의 마크 업 파서는 이미지를 열고 실제 파일에 대한 연결을 유지합니다. 사용자가 이미지를 전환하도록 허용하는 것과 비슷한 문제가있었습니다. 내가 가지고있는 방법은 IValueConverter을 사용하여 Image을로드하고 BitmapImage.CacheOptionBitmapCacheOption.OnLoad으로 설정하는 것입니다. 이 시도 :

public class FilePathToImageConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value.GetType() != typeof(string) || targetType != typeof(ImageSource)) return false; 
     string filePath = value as string; 
     if (filePath.IsNullOrEmpty() || !File.Exists(filePath)) return DependencyProperty.UnsetValue; 
     BitmapImage image = new BitmapImage(); 
     try 
     { 
      using (FileStream stream = File.OpenRead(filePath)) 
      { 
       image.BeginInit(); 
       image.StreamSource = stream; 
       image.CacheOption = BitmapCacheOption.OnLoad; 
       image.EndInit(); 
      } 
     } 
     catch { return DependencyProperty.UnsetValue; } 
     return image; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return DependencyProperty.UnsetValue; 
    } 
} 

당신은 다음과 같이 사용할 수 있습니다 :

<Application.Resources> 
    <Converters:FilePathToImageConverter x:Key="FilePathToImageConverter" /> 
</Application.Resources> 

...

<Image Source="{Binding SomeObject.SomeImageFilePath, 
    Converter={StaticResource FilePathToImageConverter}, Mode=OneWay}" />