时,这是一个记录类构造函数抛出异常:C#FileLogTraceListener关闭
public QFXLogger(
int maxFileSize,
TraceLevel logLevel)
{
this.maxFileSize = maxFileSize;
logSwitch.Level = logLevel;
//Configure log listener
traceListener = new FileLogTraceListener();
traceListener.DiskSpaceExhaustedBehavior = DiskSpaceExhaustedOption.DiscardMessages;
traceListener.CustomLocation = @".\Log";
traceListener.BaseFileName = "QFXLog";
traceListener.AutoFlush = true;
//Remove all other listeners
Trace.Listeners.Clear();
//Add QFX listener
Trace.Listeners.Add(traceListener);
//Write header
WriteSessionHeader();
}
这是destrcutor:
~QFXLogger()
{
WriteSessionFooter();
traceListener.Close();
}
我只想之前写一个页脚底层流记录器获取GC。 没有析构函数一切都很好,但它我得到以下几点:
Unhandled Exception: System.ObjectDisposedException: Cannot access a closed file
.
at System.IO.__Error.FileNotOpen()
at System.IO.FileStream.Flush(Boolean flushToDisk)
at System.IO.FileStream.Flush()
at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
at System.IO.StreamWriter.Flush()
at Microsoft.VisualBasic.Logging.FileLogTraceListener.ReferencedStream.CloseS
tream()
at Microsoft.VisualBasic.Logging.FileLogTraceListener.CloseCurrentStream()
at Microsoft.VisualBasic.Logging.FileLogTraceListener.Write(String message)
at System.Diagnostics.TraceInternal.Write(String message)
at System.Diagnostics.Trace.Write(String message)
at QFXShell.QFXLogger.WriteSessionFooter()
at QFXShell.QFXLogger.Finalize()
在我看来,底层流已经关闭。
我该如何抑制这种关闭(底层流)或者这是另一个问题?
@Ramhound WriteSessionFooter除此之外不做任何事情:Trace.Write(footerString);问题是我想在应用程序关闭之前编写结束语句。 – Juergen
当我在我的类的IDisposable接口实现中调用Stream.Dispose()时发生了此ObjectDisposedException,但在移除对Stream.Flush()的调用函数调用后停止了此操作。 – Roger
哎呀,说得太快。通过确保我的Dispose(bool isFreeingManagedResources)函数被虚拟保护,解决了这个问题,正如Kelly Leahy在他的网站上解释的那样。以前,我把它当作私人的。 – Roger