我一直在努力使用Dispose正确地处理我们的代码,以解决一些事情被留下的问题。其中一个例子是图标,我注意到了一些奇怪的事情,如果我调用Icon.Dispose()
,我仍然可以使用这个图标。
所以我把它提取出来放到一个小的控制台应用程序中,我完全期望它会崩溃(抛出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");
}
}
}
GC.Collect()
是完全无关的问题。 - recursive