我非常感谢有人帮助我解决以下问题:
我时不时地遇到以下异常:
索引超出范围。必须为非负数且小于 集合。参数名称:chunkLength
在
stringBuilder.ToString()
。
奇怪的是,如果我把
stringBuilder.ToString()
放入手表中,它就可以正常工作了。
看起来这是一个多线程问题。我锁定了线程以防止同时多次访问 stringBuilder。
public void AddString(string s)
{
lock(this.LockObject)
{
StringBuilder.AppendLine(s);
}
}
我在多线程中遇到了同样的问题,并使用 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();
}
}
}