У меня возникла проблема, о которой, кажется, никто не знает в Интернете: мое приложение Windows зависает, когда последовательное соединение прерывается внутренним исключением платы.
Вот — простейший пример проблемы: Простейший код C#, открывающий соединение COM-порта.
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# (например, вы не всегда будете создателем любого модуля, которым вы обладаете). Я не думаю, что простая плата должна перестать контролировать хост.
У меня возникла проблема, о которой, кажется, никто не знает в Интернете: мое приложение Windows зависает, когда последовательное соединение прерывается внутренним исключением платы. Вот — простейший пример проблемы: [b]Простейший код C#, открывающий соединение COM-порта.[/b] [code]internal static class Program { private static SerialPortStream _serialPort;
static void Main() { _serialPort = new SerialPortStream("COM6", 9600, 8, Parity.None, StopBits.One); _serialPort.Open(); } } [/code] [b]Код платы Arduino, который имитирует внутреннее исключение после небольшой задержки.[/b] [code]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]; } [/code] Это очень простой способ создать это исключение. Некоторая полезная информация: [list] [*]Я использую модуль Raspberry Pi Pico (RP2040 Zero) [*]Я использую RJCP.IO.Ports для связи через COM-порт на стороне C#. Я также не думаю, что это проблема библиотеки, потому что я заметил, что терминал Visual Studio Code также зависает, когда пытается установить последовательную связь для чтения. [*]Я пробовал вызывая метод Open() внутри разных задач и BackgroundWorker, в обоих случаях, даже если приложение не зависло, я не могу закрыть приложение, пока не перезагрузлю плату через встроенный переключатель. [*]Я знаю, что могу «исправить» это в коде Arduino, но суть этого вопроса в том, чтобы иметь возможность обрабатывать такой случай в приложении C# (например, вы не всегда будете создателем любого модуля, которым вы обладаете). Я не думаю, что простая плата должна перестать контролировать хост. [/list] Спасибо всем, кто помогает!