Приложение C# зависает из-за заблокированного последовательного соединения из-за того, что на плате Arduino возникло внуC#

Место общения программистов C#
Ответить
Anonymous
 Приложение C# зависает из-за заблокированного последовательного соединения из-за того, что на плате Arduino возникло вну

Сообщение Anonymous »

У меня возникла проблема, о которой, похоже, никто не знает в Интернете: мое приложение Windows зависает, когда последовательное соединение прерывается внутренним исключением платы.
Вот — простейший пример проблемы:
Простейший код C#, открывающий соединение COM-порта.

Код: Выделить всё

internal static class Program
{
private static SerialPortStream _serialPort;

static void Main()
{
_serialPort = new SerialPortStream("COM6", 9600, 8, Parity.None, StopBits.One);
_serialPort.Open();
}
}
Код платы Arduino, который имитирует внутреннее исключение после небольшой задержки.

Код: Выделить всё

void loop()
{
delay(500); //We wait 0.5 seconds to allow the COM port connection to "Successfully" be established, and so the .Open() call in C# won't throw an exception.

//We create an internal exception, in this instance we try to set an array size to a negative value
int index = -4;
byte* serialData = new byte[index];
}
Это очень простой способ воссоздать эту проблему.
Некоторая полезная информация:
  • Я использую модуль Raspberry Pi Pico (RP2040 Zero).
  • RP2040 подключен через USB-C, его последовательные порты работают через USB.
  • Я использую RJCP.IO.Ports для связи через COM-порт на стороне C#. Я также не думаю, что это проблема библиотеки, поскольку я заметил, что терминал Visual Studio Code также зависает, когда пытается установить последовательную связь для чтения.
  • Я пробовал вызов метода Open() внутри другой задачи и BackgroundWorker, в обоих случаях, даже если приложение не зависло, я не могу закрыть приложение, пока не перезагрузлю плату через ее встроенный переключатель (на самом деле, я понял, что программа закроется примерно через 1 минуту после того, как я попытаюсь его закрыть).
  • Я знаю, что могу «исправить» это в коде Arduino, но суть этого вопроса в том, чтобы иметь возможность справиться с таким случай в приложении C# (например, вы не всегда будете создателем любого имеющегося у вас модуля). Я не думаю, что простая доска должна перестать контролировать хост.
Спасибо всем, кто помогает!

Подробнее здесь: https://stackoverflow.com/questions/791 ... rduino-boa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»