1

アプリケーションはデスクトップドキュメント管理システムです。(スキャンされたドキュメントの)画像ファイルは、共有ネットワークフォルダー内に保存され、そのインデックスはデータベース内に保存されます。これで、選択したドキュメントページの画像が表示されたときに、ユーザーはそれを削除するオプションがあります(コンテキストメニューを使用)。問題は、これを実行しようとすると、画面に表示されていることを考えると、すべての意味を持つ例外(リソースがロックされている)がスローされることです。そのため、現在、永続的な削除キューを維持しています。アプリが起動したら、キューに移動して、インデックスがDBから削除され、表示されていないドキュメントのページを削除します。削除は成功しますが、これはかなり悪いコードのようです(つまり、機能しますが、そうではありません)必要なだけきれいだと思います)。

私の迅速な解決策はどれほど悪いか。アプリがシングルユーザーである場合、ユーザーはアプリを使用するためにスターを付ける必要があります。これは非常に悪い考えですか、それとも別のパスを使用して実装できますか?

画像は、現在のファイルにバインドすることで(ドキュメントビューア内に)表示されます。

意見:

<Image Name="PageViewedPath" Margin="20" Grid.Column="0" />

ViewModel:

public string PageViewedPath { get; set; }

そして、ユーザーが次または前をクリックすると、変更します(ViewModel内でPageViewedPath)。おそらく問題は、私が詳細に制御できないこのバインディングです。私はCaliburn Microを使用しているので、画像名を設定するだけでバインディングが実行されます。

このバインディングをオーバーライドして、表示される前に画像のハードコピーを作成することはうまくいくはずだと思いますが、それがうまくいくかどうか、さらに悪いことに、それを行う方法はわかりません。

4

2 に答える 2

1

画像プールを使用して開発したアプリケーションでも、同様の問題が発生しました。画像は表示されなくなりましたが、ファイルがロックされて削除できませんでした。

BitmapCacheOption.OnLoad私は次のような画像をロードすることで問題を解決しました:

Image myImage = new Image();
BitmapImage bi = new BitmapImage();
bi.BeginInit();

bi.CacheOption = BitmapCacheOption.OnLoad;
bi.UriSource = imageUri;

// End initialization.
bi.EndInit();
myImage.Source = bi;

xamlからBitmapCacheOptionを使用する方法を示すmsdn投稿へのリンクは次のとおりです。

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/3cb97997-941f-42a8-a03b-f84b152c1139/

于 2012-06-22T18:24:09.500 に答える
0

独自のコードからファイルをコードロックする場合は、ロックを停止します。画像の読み込みの前後のどこかでusing/呼び出しが欠落している可能性があります。Dispose

それがあなたのコードではない場合、または共有ファイルの場所を使用することによる失敗を処理する必要がある場合-あなたの解決策は大丈夫かもしれません。また、ほとんどのユーザーはそのような動作を期待していません-私の通常の期待は、ファイルが即座に削除されるか、まったく削除されないことです。

于 2012-06-22T18:03:43.470 に答える