일부 그림 소스를 사용하는 프로그램을 작성하여 파일을 작성했습니다. 고객 미리보기로 작업하기 전에 이미지가 표시됩니다. 그러므로 나는 그들과 함께 일하기 전에 그들을 처분 할 필요가있다. 하지만 나중에 다시 미리보기를로드하고 싶습니다. 동적으로 처리하고 싶은 그림이 너무 많아서 실패합니다.C# 사전을 사용하여 비트 맵 삭제 및 재 작성 /로드
나는 문자열로 파일 이름 사전을 사용
//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 만 볼 수있다.
뻔뻔스럽게 말하면 어디서 실패합니까?
미안하지만이 문제는 내 문제와 어떤 관련이 있습니까? 또한 나는 그것의 동일한 속도가 개체 또는 문자열을 검색, 어쨌든 나는 검색/무언가를 조작 할 의도가 생각합니다. – Master117
@ Master117을 호출하여 'var tempBitmap = tempAllBitmap.Key;'를 호출하면 변수의 로컬 복사본이 만들어지고 원래 사전 값은 수정되지 않습니다. 문자열 값이 변하지 않으므로 Kresimir의 조언에 따라이 문제가 해결됩니다. 그 반대의 경우도 논리적 관점에서 훨씬 더 의미가 있습니다. – Rotem
문제는 값 또는 키가 모두 다음과 같지 않습니다. tempAllBitmap.Value = new Bitmap (tempAllBitmap.Key); 또는 반대가 허용됩니다. 또한 여러 비트 맵 같은 경로/문자열을 가질 수 있습니다 따라서 문자열로 키를 사용하여 성가신 될 수도 있습니다 – Master117