Избежать ошибки "Collection was modified" - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! помогите пожалуйста советом. не могу понять в чём проблема. у меня по таймеру периодически вызываются методы, в которых происходит считывание в массив bool[].
values = master.ReadCoils(GroupWithAddress.MinAddress, count);
Каждый раз количество считываемых данных разное. Когда перехожу в режим debug выдаёт ошибку: "Collection was modified; enumeration operation may not execute" (на какой строчке это происходит тоже не видно). Из-за этого, я так понял у меня валиться программа, потому что массив bool[] объявил только один раз глобально:
bool[] values;
Причём Exception не выдавал. Просто валилась программа со стандартным сообщением от Windows чтобы отправить отчёт об ошибке или нет. Исправил. Создав массив прям в методе, локально.
bool[] values = new values[2000];
И я так понимаю, что при каждом вызове метода массив должен быть новый и ошибок быть не должно. Программа работала некоторое время, но таким же образом потом вывалилась. Предложив мне отладить вижу всё ту же ошибку в студии : "Collection was modified; enumeration operation may not execute"; Подскажите пожалуйста куда копать. Спасибо!
Вот где выдало это исключение: at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource) at System.Collections.Generic.List`1.Enumerator.MoveNextRare() at System.Collections.Generic.List`1.Enumerator.MoveNext() at System.Linq.Enumerable.d__4d`1.MoveNext() at System.Linq.Enumerable.d__3a`1.MoveNext() at System.Linq.Buffer`1..ctor(IEnumerable`1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) at Modbus.Data.DataStore.ReadData[T,U](DataStore dataStore, ModbusDataCollection`1 dataSource, UInt16 startAddress, UInt16 count, Object syncRoot) at Modbus.Device.ModbusSlave.ReadDiscretes(ReadCoilsInputsRequest request, DataStore dataStore, ModbusDataCollection`1 dataSource) at Modbus.Device.ModbusSlave.ApplyRequest(IModbusMessage request) at Modbus.Device.ModbusMasterTcpConnection.<>c__DisplayClass4.b__3() at Modbus.Device.ModbusMasterTcpConnection.CatchExceptionAndRemoveMasterEndPoint(Action action, String endPoint) at Modbus.Device.ModbusMasterTcpConnection.ReadFrameCompleted(IAsyncResult ar) at System.Net.LazyAsyncResult.Complete(IntPtr userToken) at System.Net.ContextAwareResult.CompleteCallback(Object state) at System.Threading.ExecutionContext.runTryCode(Object userData) at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Net.ContextAwareResult.Complete(IntPtr userToken) at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken) at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) О чём это может говорить?

Решение задачи: «Избежать ошибки "Collection was modified"»

textual
Листинг программы
BitArray ba = new BitArray(master.ReadCoils(GroupWithAddress.MinAddress, count));
byte[] b = new byte[ba.Count];
ba.CopyTo(b, 0);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы