Я пытался разобрать часть нашего кода, используя правильно Dispose в ряде мест, где что-то оставалось без дела. Когда-то таким экземпляром были иконки, и я заметил кое-что, что мне показалось странным: если я вызову Icon.Dispose ()
, я все еще смогу использовать Icon.
Так что я извлек его в небольшой консольное приложение, которое, как я ожидал, выйдет из строя (выбросить исключение ObjectDisposedException), но этого не произошло ... Не понимаю ли я, что здесь должно выполняться dispose?
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.IO;
namespace DisposeTest
{
class Program
{
static void Main(string[] args)
{
Icon icon = new Icon(@"C:\temp\test.ico");
icon.ToBitmap().Save(@"C:\temp\1.bmp");
icon.Save(new FileStream(@"C:\temp\1.ico", FileMode.OpenOrCreate, FileAccess.ReadWrite));
icon.Dispose();
GC.Collect(); // Probably not needed, but just checking.
icon.Save(new FileStream(@"C:\temp\2.ico", FileMode.OpenOrCreate, FileAccess.ReadWrite));
icon.ToBitmap().Save(@"C:\temp\2.bmp");
}
}
}