0

いくつかの画像リソースを使用してそれらからファイルを作成するプログラムを作成しました。カスタマー プレビューとして、作業前の画像が表示されます。したがって、それらを使用する前にそれらを処分する必要があります。しかし、後でプレビューを再度ロードしたいのですが、膨大な数の画像になる可能性があるため、動的に実行したいのですが、失敗します。

ファイル名を文字列としてディクショナリを使用します。

            //Creating a Bitmap so we can preview the Picture.
        try
        {
            mainDrawingBackgroundBitmap = new Bitmap(filePathBackgroundBackgroundImage);

            if(mainAllBitmapsDictionary.ContainsKey(mainDrawingBackgroundBitmap))
            {
                mainAllBitmapsDictionary.Remove(mainDrawingBackgroundBitmap);
            }     
            mainAllBitmapsDictionary.Add(mainDrawingBackgroundBitmap,filePathBackgroundBackgroundImage);
        }

今、私のビットマップとパスはディクショナリにありますが、後で次のように処分します:

        private void DisposeAllFiles()
    {
        foreach (var tempBitmap in mainAllBitmapsDictionary.Keys)
        {
            tempBitmap.Dispose();
        }
    }

これはうまく機能します。今、ビットマップを再作成しようとすると:

        private void RessurrectAllFiles()
    {
        foreach (var tempAllBitmap in mainAllBitmapsDictionary)
        {
            try
            {
                var tempBitmap = tempAllBitmap.Key;
                tempBitmap = new Bitmap(tempAllBitmap.Value);
            }
            catch (ArgumentException ae)
            {
            }
        }

    }

彼は失敗したりエラーをスローしたりしません。ディクショナリは正しいビットマップと文字列でいっぱいになりますが、それらは元のオブジェクトに影響を与えないようです。したがって、ディクショナリはそのままですが、次のようなビットマップを検査すると: mainDrawingBackgroundBitmap、ArgumentExceptions しか表示されません。

率直に言って、どこで失敗しますか?

4

1 に答える 1

1

画像へのパスをキーとして、ビットマップ データを値として保持すると、データの操作が簡単になり、辞書の検索が高速になります。

Dictionary<string, Bitmap>
于 2012-08-27T07:46:06.163 に答える