多线程公用 StreamWriter 引起错误、、问题一开始不会发生,程序执行了一段时间后出现错误、主要代码如下:
private StreamWriter outcomeStream=null;
private void createOutcome()
{
string dir = Path.Combine(Application.StartupPath, "Temp");
if (!Directory.Exists(dir))
{ Directory.CreateDirectory(dir); }
string outcomeFile = Path.Combine(dir, taskinfo.ID + ".cache");
if (outcomeStream == null)
outcomeStream = new StreamWriter(outcomeFile, true, Encoding.Default);
}
private void saveFile(ThreadInfo ti)
{
try
{
outcomeStream.WriteLine(ti.Acc + "\t" +
ti.Pwd + "\t" +
ti.WowFlag);
}
catch (Exception ex) { OnLogBack.Invoke("保存异常:" + ex.Message); }
}
错误消息:在复制内存时检测到可能的 I/O 争用条件。默认情况下,I/O 包不是线程安全的。在多线程应用程序中,必须以线程安全方式(如 TextReader 或 TextWriter 的 Synchronized 方法返回的线程安全包装)访问流。这也适用于 StreamWriter 和 StreamReader 这样的类。