画像の表示にも同様の問題がありました。画像のあるコントロールでは、ユーザーが画像を更新しようとするたびに「ファイルは使用中です」というエラーが表示されます。BitmapImage.CacheOption
解決策は、プロパティをBitmapCacheOption.OnLoad
次のように設定することでした。
MSDNによると、BitmapImage の作成に使用されたストリームを閉じたい場合は、CacheOption を BitmapCacheOption.OnLoad に設定してください。デフォルトの OnDemand キャッシュ オプションは、イメージが必要になるまでストリームへのアクセスを保持し、クリーンアップはガベージ コレクターによって処理されます。
に使用できる同様のプロパティを検索した後、MediaElement
1 つも存在しないことが判明しました。ただし、MSDN からの mediaelement 投稿の chacheoption に関する回答によると、これを達成するための (長ったらしい) 方法があります...関連する回答から:
MediaElement が UserControl にあるかどうかはわかりません。ただし、どのような場合でも、UserControl または Control を IsEnabled=false に設定すると、イベント ハンドラー IsEnabledChanged がトリガーされます。その中に、MediaElement の再生を停止するために必要なコード ME.Stop() を配置し、ME.Clear() と ME.Source = null を呼び出します。その後、ソース ファイルを削除しても問題はありません。
ME.Source = new Uri(MediaFilePath);
ME.Play();
...
private void DeleteButton_Click(object sender, RoutedEventArgs e)
{
ME.IsEnabled = false; // This will call the Event Handler IsEnabledChanged
System.IO.File.Delete(MediaFilePath);
// Now after the player was stopped and cleared and source set to null, it
// won't object to deleting the file
}
private void ME_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
{
ME.Stop();
ME.Clear();
ME.Source = null;
}
これが役立つことを願っています。