ImageList는 삽입 된 모든 이미지의 복사본을 만들어야합니다. 따라서 원본을 목록에 추가 한 후 처분하는 것이 안전해야합니다.ImageList : 원본 이미지를 삭제하면 목록에서 제거됩니다.
왜 다음 테스트 케이스가 실패합니까? 여기에 일어날 것으로 보인다 무엇
Bitmap test = new Bitmap(128, 128);
ImageList il = new ImageList();
il.Images.Add(test);
Assert.AreEqual(1, il.Images.Count); // OK, image has been inserted
test.Dispose(); // now let's dispose the original
try
{
var retrievalTest = il.Images[0];
}
catch (ArgumentException) // ... but this Exception happens!
{
}
Assert.AreEqual(1, il.Images.Count); // and this will fail
은 이것이다 : 이미지를 검색하려고 할 때의 ImageList 원래 배치 된 것을 발견하고의 ImageList에서 제거합니다.
왜 그런 일이 일어 났을 까, 나는 ImageList가 이미지의 복사본을 만들 것이라고 생각 했는가?
MSDN의 문서는 불행히도이 질문에 실제로 대답하기에 충분하지 않습니다. ['ImageList' *는'Dispose'를 덮어 씁니다.] (https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/ImageList.cs,587)와 ['ImageList '때때로 이미지 복사본을 만듭니다.] (https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/ImageList.cs,513),'Dispose'처럼 보입니다. 'ImageList' 자체가 만들고 유지 보수 한 이미지의 복사본과'Control '을'Dispose'한 후 이미지를 복사합니다. – jrh