이미지 파일을 Paint에서 편집 할 때 FileSystemWatcher를 사용하여 이벤트를 발생시키고이를 사용하여 미리보기 이미지 컨트롤을 업데이트합니다. 그러나 파일을 소스로 두 번째로 설정하면 파일이 다른 프로세스에서 계속 사용되고 있기 때문에 오류가 발생합니다. 그래서 이것이 FileSystemWatcher 때문이라는 것을 알게되었습니다. 나는 Image
제어를 업데이트하기 전에 파일을 해제하려면이 코드에서FileSystemWatcher가 파일을 잠글 때 해제하는 방법은 무엇입니까?
private void btnEdit_Click(object sender, RoutedEventArgs e)
{
if (!File.Exists(lastImage)) return;
FileSystemWatcher izleyici = new FileSystemWatcher(System.IO.Path.GetDirectoryName(lastImage),
System.IO.Path.GetFileName(lastImage));
izleyici.Changed += izleyici_Changed;
izleyici.NotifyFilter = NotifyFilters.LastWrite;
izleyici.EnableRaisingEvents = true;
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = lastImage;
info.Verb = "edit";
Process.Start(info);
}
void izleyici_Changed(object sender, FileSystemEventArgs e)
{
//I want to add code here to release the file. Dispose() not worked for me
setImageSource(lastImage);
}
void setImageSource(string file)
{
var bitmap = new BitmapImage();
using (var stream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
{
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
}
ssPreview.Source = bitmap;
}
:
나는이 코드를 가지고있다. 나는 Dispose
을 시도했지만 제대로 작동하지 않았습니다. 어떻게해야합니까?
감사합니다, 그것은했다. 하지만 UI 스레드에서 해고 당하지 않는다는 것은 무엇을 의미합니까? 논리를 얻으려면 더 자세한 설명을 해 주시겠습니까? 그것은 나를 위해 중요합니다. 다시 한번 감사드립니다. –
[Dispatcher] (https://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher (v = vs.110) .aspx) 클래스의 온라인 설명서를 읽을 수 있습니다. – Clemens