如何判断一个编写器是否已关闭?

Mel*_*nie 12 .net clr c++-cli backgroundworker streamwriter

我正在使用一个streamwriter与后台工作者一起进行日志记录.

就这样,我有

System::Void
MyUI::execBWorker_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e) {

String^ outputPath = _clr::Settings::ApplicationLogPath("_log.txt", true, false);
logfile_ = gcnew StreamWriter(outputPath,true);

DoStuff();
logfile_->Close();
}
Run Code Online (Sandbox Code Playgroud)

DoStuff()方法中的内容引发了Progress事件.

System::Void
MyUI::execBWorker_ProgressChanged(System::Object^  sender, System::ComponentModel::ProgressChangedEventArgs^  e) {
logfile_->WriteLine("something");
}
Run Code Online (Sandbox Code Playgroud)

我觉得这真的很有气味.我怎样才能让它变得更好,或者至少如何检查日志文件是否尚未关闭?有很多消息,所以我担心连续打开和关闭日志文件.

lep*_*pie 20

如果StreamWriter关闭,BaseStream酒店将返回null.

  • 这个答案是错误的 - 对我来说它没有返回 null 并且 Resharper 也警告我 (streamWriter.BaseStream != null) 总是 true。 (2认同)