2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WPFでBitmapImageクラスを用いた時に、読み込んだ画像ファイルをプロセスで占有しない方法

Posted at

はじめに

WPF で BitmapImageクラスを用いた時に、ヘルプページなどのよくある実装例をそのまま利用すると、読み込んだ画像ファイルを対象アプリケーションのプロセスが占有してしまい、アプリケーションを終了するまで、その画像ファイルを変更・削除できなくなります。
その回避策の紹介です。

BitmapImage クラスのヘルプはこちら

回避策

BitmapImage クラスには、BitmapImage.CacheOption プロパティというものがあり、これを変更することで、メモリ上に画像ファイルを保持する期間が変更できます。
BitmapImage.CacheOption プロパティ

上記プロパティを OnLoad に設定することで、読み込み後に画像ファイルを占有しなくなります。

具体的には、以下のコードになります。


BitmapImage bmpImage = new BitmapImage();
using (FileStream stream = File.OpenRead(filePath))
{
	bmpImage.BeginInit();
	bmpImage.CacheOption = BitmapCacheOption.OnLoad;  // ここが重要
	bmpImage.StreamSource = stream;
	bmpImage.EndInit();
	stream.Close();
}

以下にも同様のことが書かれていました。
How to free the memory after the BitmapImage is no longer needed?
ファイルから解放可能なBitmapImageを読み込む

まとめ

私はWPFを用いて こちらのツール を作っています。

Twitterでも開発に役立つ情報を発信しています → @kojimadev

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?