谢谢个位大虾!

解决方案 »

  1.   

    看看下面的文章,也许会有收获
    http://www3.ccw.com.cn/club/essence/200201/7841.htm
    http://www.cnblogs.com/meyer/archive/2004/03/15/3238.html
    http://www.enet.com.cn/A20041223375032_2.html
      

  2.   

    finalize()没有记错的话。好象是这个里面调用了dispose()
      

  3.   

    Finalize 操作具有下列限制: 垃圾回收过程中执行终结程序的准确时间是不确定的。不保证资源在任何特定的时间都能释放,除非调用 Close 方法或 Dispose 方法。 
    即使一个对象引用另一个对象,也不能保证两个对象的终结程序以任何特定的顺序运行。即,如果对象 A 具有对对象 B 的引用,并且两者都有终结程序,则当对象 A 的终结程序启动时,对象 B 可能已经终结了。 
    运行终结程序的线程是未指定的。 
    在下面的异常情况下,Finalize 方法可能不会运行完成或可能根本不运行: 另一个终结程序无限期地阻塞(进入无限循环,试图获取永远无法获取的锁,诸如此类)。由于运行时试图运行终结程序来完成,所以如果一个终结程序无限期地阻塞,则可能不会调用其他终结程序。 
    进程终止,但不给运行时提供清理的机会。在这种情况下,运行时的第一个进程终止通知是 DLL_PROCESS_DETACH 通知。 
    在关闭过程中,只有当可终结对象的数目继续减少时,运行时才继续 Finalize 对象。如果 Finalize 或 Finalize 的重写引发异常,运行时将忽略异常、终止此 Finalize 方法,并继续终结进程。对实施者的说明:  默认情况下,Object.Finalize 不执行任何操作。只有在必要时才必须由派生类重写它,因为如果必须运行 Finalize 操作,垃圾回收过程中的回收往往需要长得多的时间。如果 Object 保存了对任何资源的引用,则 Finalize 必须由派生类重写,以便在垃圾回收过程中,在放弃 Object 之前释放这些资源。当类型使用文件句柄或数据库连接这类在回收使用托管对象时必须释放的非托管资源时,该类型必须实现 Finalize。有关辅助和具有更多控制的资源处置方式,请参见 IDisposable 接口。Finalize 可以采取任何操作,包括在垃圾回收过程中清理了对象后使对象复活(即,使对象再次可访问)。但是,对象只能复活一次;在垃圾回收过程中,不能对复活对象调用 Finalize。[C#] 析构函数是执行清理操作的 C# 机制。析构函数提供了适当的保护措施,如自动调用基类型的析构函数。在 C# 代码中,不能调用或重写 Object.Finalize。