Распространенными источниками этой ошибки являются ошибки пользовательского маршалинга для COM-взаимодействия или Pinvoke, которые могут повредить стек - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь создать графический интерфейс для взаимодействия с моим сервоприводом.Программа работает нормально и не имеет никаких ошибок компиляции, но после выполнения около 10-15 секунд я получаю ошибку, о которой я понятия не имею.

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

Я загрузил свою программу (GUI) в github и это ссылка для github .

Ниже приведен снимок моего кода по ошибке.

My code Snapshot

Читая в Интернете, чтобы найти причину ошибки, я увидел, что некоторые говорят, чтодля них ошибка возникает в произвольном месте их кода, но в отличие от них ошибка всегда в функции ReadPort, которая запускается в другом потоке, а не в главном.

1 Ответ

0 голосов
/ 22 декабря 2018

Я не знал, в чем причина проблемы, но я внес некоторые изменения в метод ReadPort () в своем классе SerialPortManager, как показано ниже, и графический интерфейс пока работает хорошо.

public void ReadPort()
{
  string ReceivedMessage = "No Message";
  if (_serialPort == null)
   {
     return;
   }
  while (_keepReading)
   {
        List<byte> receiveBuffer = new List<byte>();
        int bytesToRead = _serialPort.BytesToRead;
        byte[] tempBuffer = new byte[bytesToRead];
        _serialPort.Read(tempBuffer, 0, bytesToRead);
        receiveBuffer.AddRange(tempBuffer);

        ReceivedMessage = _serialPort.Encoding.GetString(receiveBuffer.ToArray());
        
        if (OnDataReceived != null)
            OnDataReceived(this, ReceivedMessage);
	}
}

Остальной код такой же, как загруженный в github

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