【发布时间】:2011-02-08 17:15:39
【问题描述】:
我有一个被写入的 StreamWriter。
当行数达到 500 时,它会关闭它并移动文件。
我还添加了一个计时器,因此它每 5 秒关闭一次并移动文件。
很明显,如果计时器启动并关闭 StreamWriter,然后在 MyMethod 中它尝试写入 StreamWriter,它会抛出一个摆动。因此,我添加了一些锁定以尝试防止出现任何问题,因此如果计时器启动,它会关闭 StreamWriter,分配一个新文件名,然后在锁定之后,如果 MyMethod 尝试写入它,一切都应该没问题。
以下代码是否足以处理您认为的任何问题?
private readonly object objLock = new object();
private StartUpMethod()
{
if (tmFileWriter == null)
{
tmFileWriter = new Timer(5000);
tmFileWriter.AutoReset = false;
tmFileWriter.Elapsed += new ElapsedEventHandler(tmFileWriter_Elapsed);
}
}
private void MyMethod()
{
lock (objLock)
{
if (_tempFilename == "")
{
_tempFilename = GenerateFileName();
_tw = new System.IO.StreamWriter(_tempFilename);
}
}
//Do some processing
lock (objLock)
{
_tw.WriteLine(sql);
_filelineCount++;
if (_filelineCount > 500)
{
_tw.Close();
System.IO.File.Move(_tempFilename, _tempFilename.Replace(".tmp", ".sql"));
_tempFilename = "";
_filelineCount = 0;
}
}
private void tmFileWriter_Elapsed(object sender, ElapsedEventArgs e)
{
tmFileWriter.Stop();
lock (objLock)
{
if (_tw != null)
{
_tw.Close();
System.IO.File.Move(_tempFilename, _tempFilename.Replace(".tmp", ".sql"));
_tempFilename = GenerateFileName();
_tw = new StreamWriter(_tempFilename);
}
}
tmFileWriter.Start();
}
}
【问题讨论】:
-
异常、错误、黑洞:-)
-
@Jon:但为什么“摇摆不定”?这是某种伦敦押韵俚语吗?
-
是的,我想说的更多英语俚语
-
@siride:根据dictionary.reference.com/browse/wobbly:3。俚语 throw a wobbly 突然变得非常激动或生气。 也许我很奇怪,但我马上就理解了“throw a wobbly”。
标签: c# .net winforms multithreading locking