Избежать ошибки "Collection was modified" - C#
Формулировка задачи:
Добрый день!
помогите пожалуйста советом. не могу понять в чём проблема.
у меня по таймеру периодически вызываются методы, в которых происходит считывание в массив bool[].
Каждый раз количество считываемых данных разное. Когда перехожу в режим debug выдаёт ошибку: "Collection was modified; enumeration operation may not execute" (на какой строчке это происходит тоже не видно). Из-за этого, я так понял у меня валиться программа, потому что массив bool[] объявил только один раз глобально:
Причём Exception не выдавал. Просто валилась программа со стандартным сообщением от Windows чтобы отправить отчёт об ошибке или нет.
Исправил. Создав массив прям в методе, локально.
И я так понимаю, что при каждом вызове метода массив должен быть новый и ошибок быть не должно.
Программа работала некоторое время, но таким же образом потом вывалилась. Предложив мне отладить вижу всё ту же ошибку в студии : "Collection was modified; enumeration operation may not execute";
Подскажите пожалуйста куда копать. Спасибо!
values = master.ReadCoils(GroupWithAddress.MinAddress, count);
bool[] values;
bool[] values = new values[2000];
Вот где выдало это исключение:
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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д