我有一個寫入的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();
}
}
什麼是「搖擺」? – siride 2011-02-08 17:18:30
例外,錯誤,黑洞:-) – Jon 2011-02-08 17:22:14
@Jon:但爲什麼「搖擺」?那是一種俚語俚語嗎? – siride 2011-02-08 17:22:57