C#使用字典处理和重新排序/加载位图

C#使用字典处理和重新排序/加载位图,c#,winforms,bitmap,dispose,C#,Winforms,Bitmap,Dispose,我编写了一个程序,使用一些图片资源并从中创建一个文件。 作为客户预览,图像将在使用前显示。因此,我需要先处理它们,然后才能处理它们。但是我想在之后再次加载预览,因为它可能有大量的图片,所以我想动态加载,但失败了 我使用文件名为字符串的字典: //Creating a Bitmap so we can preview the Picture. try { mainDrawingBackgroundBitmap = ne

我编写了一个程序,使用一些图片资源并从中创建一个文件。 作为客户预览,图像将在使用前显示。因此,我需要先处理它们,然后才能处理它们。但是我想在之后再次加载预览,因为它可能有大量的图片,所以我想动态加载,但失败了

我使用文件名为字符串的字典:

            //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这样的位图时,我只看到异常


直截了当地说,我在哪里失败了?

将图像路径作为键,位图数据作为值,这样操作数据就很容易了,搜索字典的速度也会很快

Dictionary<string, Bitmap>
字典

对不起,这与我的问题有什么关系?另外,我认为搜索一个对象或字符串的速度是一样的,无论如何,我不打算搜索/操作某些东西。@Master117,方法是调用
var tempBitmap=tempAllBitmap.Key您正在创建变量的本地副本,而不是以任何方式修改原始字典值。按照Kresimir的建议可以解决这个问题,因为字符串值没有改变。从逻辑的角度来看,以另一种方式使用它也更有意义。问题是,无论是作为值还是作为键都是:tempAllBitmap.Value=newbitmap(tempAllBitmap.Key);或者它允许的反对意见。此外,多个位图可能具有相同的路径/字符串,因此我认为使用字符串作为键可能是正确的troublesome@Master117不同的位图怎么可能来自同一个文件?另外,
tempAllBitmap.Value
是允许的,为什么不允许呢?@Master117必须通过重置字典键来实现这一点。e、 g.:
theDictionary[theKey]=新值