Приложение 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)
  • Я использую RJCP.IO.Ports для связи через COM-порт на стороне C#. Я также не думаю, что это проблема библиотеки, потому что я заметил, что терминал Visual Studio Code также зависает, когда пытается установить последовательную связь для чтения.
  • Я пробовал вызывая метод Open() внутри разных задач и BackgroundWorker, в обоих случаях, даже если приложение не зависло, я не могу закрыть приложение, пока не перезагрузлю плату через встроенный переключатель.
  • Я знаю, что могу «исправить» это в коде Arduino, но суть этого вопроса в том, чтобы иметь возможность обрабатывать такой случай в приложении C# (например, вы не всегда будете создателем любого модуля, которым вы обладаете). Я не думаю, что простая плата должна перестать контролировать хост.
Спасибо всем, кто помогает!

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

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

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

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

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

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