Исключение Где это не должно быть (System.FormatException).Как отлаживать? - PullRequest
0 голосов
/ 15 февраля 2019

Я никогда раньше не был так туп в программировании.Из того, что я обнаружил, эта ошибка выдается, когда вы пытаетесь преобразовать строку в int, но почему это говорит о том, что ошибка происходит в этой строке?Там нет целых или строк, которые можно увидеть. Пожалуйста, посмотрите этот рис ошибки.

Как мне детализировать, где именно происходит преобразование строки в int или что-то еще?

Может ли это быть многопоточностьвопрос?Я немного новичок в многопоточности C #.Могут ли ошибки просто генерироваться из другого потока и отображаться о том, что в данный момент выполняется?

Другая информация, которая может помочь:

  1. Эта ошибка происходит только в 20% случаев, нетНеважно, какой код я меняю вокруг него.
  2. С ком-портами много работы.Я чувствую, что, возможно, какой-то другой многопоточный код работает медленно в одной точке и вызывает эту ошибку в другом месте.
  3. Вероятность возникновения этой ошибки, кажется, возрастает до 80%, когда код не былвыполнить некоторое время или подключенное устройство перезапустить.
  4. Это вызывающий код:

    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());
                });
            }
    
  5. РЕДАКТИРОВАТЬ: 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);
            }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...