2012-05-11 7 views
2

私はフォームでイメージを表示するC#アプリケーションを持っています。私はこれらの画像を上書きして再生成しようとしています。私は既存のイメージを削除しようとしている間に例外が発生します(この場合はpngです)。私は、ピクチャボックスが使用しているイメージを廃棄し、それをnullに設定しようとしましたが、共有違反のために例外が発生します。それにもかかわらず、エクスプローラに行って問題なくファイルを削除できます。vshost.exeによってロックされたイメージファイルを削除するC#

この画像がどのプロセスにロックされているかを調べる際に、プロセスモニタは私のアプリケーションをホストしているvhost.exeだと教えてくれます。

どうすればこの問題を回避できますか?私はそれを削除/再作成できるようにファイルをロックを解放するホストを得ることができるいくつかの方法はありますか?最終的には、私のデータベースがグラフィックスに影響を与える変更を受けるたびに更新が必要なサムネイルとして生成される多数のイメージがあります。私はこれを行うためにコマンドシェルを呼び出す必要があると思うのは嫌です。

ありがとうございました。

ゲイリー

+3

vshost.exeは*お使いのプログラムです。 vshost部分はデバッグ用のアーティファクトです。あなたは確かにどこかで処分されたコールがありません。 –

+0

あなたが使用しているコードを投稿できますか? –

答えて

4

あなたはファイルストリームを使用して読んだ後にそれらを閉じイメージのロードを試すことができます。

FileStream fileStream = new FileStream("ImageName.jpg", FileMode.Open, FileAccess.Read); 
yourPictureBox.Image = Image.FromStream(fileStream); 
fileStream.Close(); 

または、明示的に閉じるのではなく、あなたはusingステートメントを採用することができます。

using(FileStream fileStream = new FileStream("ImageName.jpg", FileMode.Open, FileAccess.Read)) 
{ 
    yourPictureBox.Image = Image.FromStream(fileStream); 
} 
+0

私はそれを試みました、それは違いはありません。私もvshost.exeの使用を無効にしましたが、アプリケーション自体によってロックされてしまいました。 – Gary

+0

実際には、これは結局動作します。ありがとう@daryal。 – Gary

+0

この方法で画像を操作すると、これでもエラーが発生します。バッキングリソース(ファイルやストリームのような)からオープンされている場合、それらのリソースは常に存在するとみなされます。この辺りの唯一の方法は[画像データの深いクローン]です(https://stackoverflow.com/a/48170549/395685) – Nyerguds

関連する問題