none
多线程公用 StreamWriter 引起 I/O 争用条件错误!求解 RRS feed

  • 问题

  • 多线程公用 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 这样的类。

    2011年6月26日 14:28

答案

全部回复