StringBuilder.ToString() 抛出“索引超出范围”异常

问题描述 投票:0回答:2

我非常感谢有人帮助我解决以下问题:

我时不时地遇到以下异常:

索引超出范围。必须为非负数且小于 集合。参数名称:chunkLength

stringBuilder.ToString()

奇怪的是,如果我把

stringBuilder.ToString()
放入手表中,它就可以正常工作了。

c# exception tostring stringbuilder
2个回答
52
投票

看起来这是一个多线程问题。我锁定了线程以防止同时多次访问 stringBuilder。

public void AddString(string s)
{
  lock(this.LockObject)
  {
     StringBuilder.AppendLine(s);
  }
} 

0
投票

我在多线程中遇到了同样的问题,并使用 ThreadSafeStringBuilder 解决了它。

 public class ThreadSafeStringBuilder
 {
     private readonly StringBuilder _stringBuilder = new StringBuilder();
     private readonly object _lockObject = new object();

     public void AppendLine(string value)
     {
         lock (_lockObject)
         {
             _stringBuilder.AppendLine(value);
         }
     }

     public override string ToString()
     {
         lock (_lockObject)
         {
             return _stringBuilder.ToString();
         }
     }
 }
© www.soinside.com 2019 - 2024. All rights reserved.