Я никогда раньше не был так туп в программировании.Из того, что я обнаружил, эта ошибка выдается, когда вы пытаетесь преобразовать строку в int, но почему это говорит о том, что ошибка происходит в этой строке?Там нет целых или строк, которые можно увидеть. Пожалуйста, посмотрите этот рис ошибки.
Как мне детализировать, где именно происходит преобразование строки в int или что-то еще?
Может ли это быть многопоточностьвопрос?Я немного новичок в многопоточности C #.Могут ли ошибки просто генерироваться из другого потока и отображаться о том, что в данный момент выполняется?
Другая информация, которая может помочь:
- Эта ошибка происходит только в 20% случаев, нетНеважно, какой код я меняю вокруг него.
- С ком-портами много работы.Я чувствую, что, возможно, какой-то другой многопоточный код работает медленно в одной точке и вызывает эту ошибку в другом месте.
- Вероятность возникновения этой ошибки, кажется, возрастает до 80%, когда код не былвыполнить некоторое время или подключенное устройство перезапустить.
Это вызывающий код:
if (comPorts.Count > 0)
{
devices.AddRange(comPorts.Select(port =>
{
var serialPort = new SerialPortAdapter(port, baudRate, Parity.None);
ICatsFtpSerialConnection catsFtpSerialConnection;
var fileManager = fileManagerFactory.GetFileManager(serialPort, baudRate, out catsFtpSerialConnection);
return new CatsDevice(port, fileManager, catsFtpSerialConnection, serialPort);
}));
Parallel.ForEach(devices, (device) =>
{
device.GetFilesArray(new CancellationToken());
});
}
РЕДАКТИРОВАТЬ: CommandManager.GetList (из связанногорис выше) звонки:
public async Task<CatsFileInfo[]> GetList(CancellationToken ct)
{
int timeoutInMilliseconds = 1000;
IMessage[] messages = await _stateManager.ExecuteCommand(_catsFtpSerialConnection,
_messageFactory.BuildGetListMessage(), timeoutInMilliseconds, 0, ct);
return _messageProcessor.ProcessMessagesForGetList(messages);
}