number007cool 2021-09-28 14:05 采纳率: 20%
浏览 61
已结题

C# 字典数据怎样深拷贝

1、接收线程将接收数据写到字典A中。 字典A的数据是实时更新的。

2、在定时器定时函数里面,创建B字典,并把A字典(jsnParser.dicRunData)拷贝到B字典( dicRunData)。

1)在把A拷贝到B的过程中有上锁。
mutexDevData.mutex.WaitOne();
dicRunData = new Dictionary<string, dsRunData>(jsnParser.dicRunData);
mutexDevData.mutex.ReleaseMutex();
2)在更新A的时候也有上锁:
mutexDevData.mutex.WaitOne();
dicRunData[sn] = runData;
mutexDevData.mutex.ReleaseMutex();

runData是一个数据对象,即字典的_值_,sn是字典的_健_

3、同时在定时器函数里面,遍历B字典每个元素,更新界面。定时器周期0.5s。

运行报错:
“System.InvalidOperationException”类型的第一次机会异常在 mscorlib.dll 中发生
System.InvalidOperationException: 集合已修改;可能无法执行枚举操作。
在 System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
在 System.Collections.Generic.Dictionary`2.Enumerator.MoveNext()
在 mqtt.Frm_DataView.updateDgv() 位置 e:\vs_test\mqttHelperV2\mqtt\Frm_DataView.cs:行号 478

问题:
怎样避免上面错误发生

  • 写回答

1条回答 默认 最新

  • number007cool 2021-09-28 22:18
    关注

    ………………

    评论

报告相同问题?

问题事件

  • 系统已结题 10月6日
  • 创建了问题 9月28日

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置