由于FileStream不可传输,应用程序崩溃



在对FileStream对象调用Close()方法之前,我拔下了底层的USB驱动器。Close()方法在尝试刷新未写入的数据时将引发异常。如果我压制异常(catch,但不要重新抛出),那么终结器将在任意时间后调用。它将尝试刷新未写入的数据,但遇到相同的错误,导致应用程序终止。

有标准的方法来处理失败的Close()调用吗?如果Close()遇到错误,您可能会1)泄露文件句柄,或者2)导致应用程序终止,这两种情况都是不可接受的。

如果不是调用Close(),而是调用Dispose(),或者将代码包装在using中,则应该能够避免GC的异常,因为终结器将不再尝试处理流。

您可以使用GC.SuppressFinalize来禁止执行终结器,这样以后当对象被垃圾收集时就不会出现错误。

最新更新