StringBuilder.ToString()抛出了一个“索引超出范围”的异常。

38

我希望有人能够帮助我解决以下问题:

偶尔会出现以下异常:

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

在运行 stringBuilder.ToString() 时。

奇怪的是,如果我把 stringBuilder.ToString() 放在监视器中,它就可以正常工作。


16
你的StringBuilder是否可能也被另一个线程使用? - Thomas Levesque
1
你能提供引起异常的代码片段,包括如何构建字符串生成器吗? - deepee1
stringBuilder.AppendLine 是在事件上调用的。然后在不同的线程上显示在屏幕上。 - Gerhard Powell
3
@GerhardPowell,这可能是你问题的原因。StringBuilder不是线程安全的,不能同时从不同的线程中使用它。如果你需要在另一个线程中显示它,请将ToString的结果传递给另一个线程,而不是传递StringBuilder本身。 - Thomas Levesque
1个回答

51

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接