イメージファイルをペイントで編集したときにFileSystemWatcherを使用してイベントを発生させ、それを使用してプレビューイメージコントロールを更新しています。しかし、ファイルをソースとして2回目に設定すると、ファイルが別のプロセスによってまだ使用されているため、エラーがスローされます。だから私はこれが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