从两个线程写入一个txt文件
Write in a txt file from two threads
我正在使用一个例程来捕获项目中的任何异常。然后我将它写在一个文本文件中。但是,如果我尝试从两个不同的线程写入 txt 文件,我该如何防止异常?
public static void LogFile(string ex)
{
try
{
string strPath = @"C:\Log.txt";
if (!File.Exists(strPath))
File.Create(strPath).Dispose();
using (StreamWriter sw = File.AppendText(strPath))
{
// sw.WriteLine("=============Error Logging ===========");
sw.WriteLine("===========Start============= " + DateTime.Now);
sw.WriteLine("Error Message: " + ex);
//sw.WriteLine("Stack Trace: " + ex.StackTrace);
sw.WriteLine("===========End============= " + DateTime.Now);
sw.WriteLine();
}
}
catch
{
}
}
当两个线程同时尝试在我的 LogFile.txet 中写入时,我得到异常,*txt 文件已被使用。
您需要像下面的代码一样同步您的 bloc。这里还有更多例子:C# version of java's synchronized keyword?
附带说明一下,有些事情不被视为良好做法,例如忽略异常。您也可以考虑使用日志库,它可以处理多线程、性能等问题...
static object Lock = new object();
public static void LogFile(string ex)
{
lock (Lock) {
try
{
string strPath = @"C:\Log.txt";
if (!File.Exists(strPath))
File.Create(strPath).Dispose();
using (StreamWriter sw = File.AppendText(strPath))
{
// sw.WriteLine("=============Error Logging ===========");
sw.WriteLine("===========Start============= " + DateTime.Now);
sw.WriteLine("Error Message: " + ex);
//sw.WriteLine("Stack Trace: " + ex.StackTrace);
sw.WriteLine("===========End============= " + DateTime.Now);
sw.WriteLine();
}
}
catch
{
}
}
}
我正在使用一个例程来捕获项目中的任何异常。然后我将它写在一个文本文件中。但是,如果我尝试从两个不同的线程写入 txt 文件,我该如何防止异常?
public static void LogFile(string ex)
{
try
{
string strPath = @"C:\Log.txt";
if (!File.Exists(strPath))
File.Create(strPath).Dispose();
using (StreamWriter sw = File.AppendText(strPath))
{
// sw.WriteLine("=============Error Logging ===========");
sw.WriteLine("===========Start============= " + DateTime.Now);
sw.WriteLine("Error Message: " + ex);
//sw.WriteLine("Stack Trace: " + ex.StackTrace);
sw.WriteLine("===========End============= " + DateTime.Now);
sw.WriteLine();
}
}
catch
{
}
}
当两个线程同时尝试在我的 LogFile.txet 中写入时,我得到异常,*txt 文件已被使用。
您需要像下面的代码一样同步您的 bloc。这里还有更多例子:C# version of java's synchronized keyword?
附带说明一下,有些事情不被视为良好做法,例如忽略异常。您也可以考虑使用日志库,它可以处理多线程、性能等问题...
static object Lock = new object();
public static void LogFile(string ex)
{
lock (Lock) {
try
{
string strPath = @"C:\Log.txt";
if (!File.Exists(strPath))
File.Create(strPath).Dispose();
using (StreamWriter sw = File.AppendText(strPath))
{
// sw.WriteLine("=============Error Logging ===========");
sw.WriteLine("===========Start============= " + DateTime.Now);
sw.WriteLine("Error Message: " + ex);
//sw.WriteLine("Stack Trace: " + ex.StackTrace);
sw.WriteLine("===========End============= " + DateTime.Now);
sw.WriteLine();
}
}
catch
{
}
}
}