VS2015,C#
全局定义
private List<StatFreqDomCenter> GLstFFreqCenter = null;
线程1:
private void CashNewDatas(List<StatFreqDomCenter> lstTmp)
{
if (null == lstTmp || lstTmp.Count < 1) return;
lstTmp.RemoveAll(o => o == null);
if (null == GLstFFreqCenter) GLstFFreqCenter = new List<StatFreqDomCenter>();
while (GLstFFreqCenter.Count > FLAGCOUNT) Thread.Sleep(1000);
GLstFFreqCenter.AddRange(lstTmp);
}
线程2:
lock (GLstFFreqCenter)
{
len = (GLstFFreqCenter.Count > BATCNT) ? BATCNT : GLstFFreqCenter.Count;
lstTmp = GLstFFreqCenter.GetRange(0, len);
GLstFFreqCenter.RemoveRange(0, len); // 错误行
}
错误提示信息:
System.ArgumentException: 源数组长度不足。请检查 srcIndex 和长度以及数组的下限。
在 System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length, Boolean reliable)
在 System.Collections.Generic.List`1.RemoveRange(Int32 index, Int32 count)
虽然不知道你线程1和线程2的关系,但在最差情况下这个List<StatFreqDomCenter>会被同时看到(操作),List的任何实例方法都不保证线程安全性,因此这里会出现一些稀奇古怪的错,如果不考虑太多性能问题的话建议这两个线程的委托方法做强同步或者将这个list改成ConcurrentQueue。