多线程写LOG文件方法实现代码:
使用Task建立异步保存LOG的动作,保证主线程的正常运行(当LOG写入失败或者因其它原因造成写入延时的情况下)
System.Threading.Tasks.Task.Run(() => { SaveTestResult(sTempStr); });
private void SaveTestResult( string sMesJudgeResult)
{
try
{
LogWriterLock.EnterWriteLock(); //保证同时只能有一个对象向文件写入信息,完成后,释放Locker
//获取Log保存路径
string sFileNamePath = Application.StartupPath + "\\" + System.DateTime.Now.Year.ToString() + "\\" + System.DateTime.Now.Month + "\\" + System.DateTime.Now.Day.ToString();
if (!System.IO.Directory.Exists(sFileNamePath))
System.IO.Directory.CreateDirectory(sFileNamePath);
sFileNamePath += "\\" + System.DateTime.Now.ToString("yyyyMMdd") + ".txt";
try
{
if (!System.IO.File.Exists(sFileNamePath))
{
System.IO.File.Create(sFileNamePath).Dispose();
}
}
catch (Exception Ex)
{
AddListItem("创建测试结果文件时出错," + Ex.Message);
return;
}
try
{
//保存日志至客户指定的位置
FileStream fs = new FileStream(sFileNamePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
StreamWriter sr = new StreamWriter(fs, System.Text.Encoding.Default);
sr.WriteLine(sMesJudgeResult);
sr.Close();
//关闭后,需要手动清理一下资源
sr.Dispose();
sr = null;
}
catch (Exception Ex)
{
AddListItem("向LOG文件保存测试结果失败!" + Ex.Message);
return;
}
}
finally
{
LogWriterLock.ExitWriteLock(); //保证同时只能有一个对象向文件写入信息,释放Locker
}
}