在对FileStream对象调用Close()方法之前,我拔下了底层的U盘。当Close()方法试图刷新未写入的数据时,它将抛出异常。如果我抑制了异常(catch,但不要重新抛出),那么在任意一段时间后终结器都会被调用。它将尝试刷新未写入的数据,但会遇到相同的错误,从而导致应用程序终止。
有没有一种标准的方法来处理失败的Close()调用?似乎如果Close()遇到错误,您要么1)泄漏文件句柄,要么2)导致应用程序终止,这两种情况都是不可接受的。
发布于 2014-08-27 06:30:29
如果不是调用Close(),而是调用Dispose(),或者将代码包装在using中,您应该能够避免来自GC的异常,因为终结器将不再尝试处理流。
发布于 2014-08-27 05:46:24
您可以使用GC.SuppressFinalize来禁止终结器执行,这样以后当对象被垃圾回收时,您就不会收到错误。
https://stackoverflow.com/questions/25515587
复制相似问题