Код всегда ловит исключение после одной неудачной попытки при открытии последовательного порта - PullRequest
0 голосов
/ 15 апреля 2019

Я обнаружил ошибку в своем коде при попытке открыть порт, когда он уже открыт. Сначала выдается исключение UnauthorizedAccessException, которое ожидается. Но после этого я закрываю порт и пытаюсь открыть его снова, используя мой код, и он всегда ловит неизвестное исключение (что является моим четвертым оператором catch). Я пробовал много вещей, но, похоже, ничего не работает.

   if (Button_Port_Open.Text == "Connect")
            {
                DC = true;
                try
                {
                    COMport = new SerialPort(Port_Name, Baud_Rate, Parity.None, 8, StopBits.One);

                    COMport.Open();

                    Button_Port_Open.Enabled = false;

                    if (COMport.IsOpen == true)
                    {
                        PictureBox_ConnectedStatus.BackColor = Color.LawnGreen;
                        Button_Port_Open.Text = "Disconnect";

                        #region EnableBoxes
                        GroupBox_Port_Commands.Enabled = true;
                        groupBox3.Enabled = true;
                        groupBox4.Enabled = true;
                        groupBox7.Enabled = true;
                        groupBox17.Enabled = true;

                        #endregion
                        TextBox_System_Log.Text = "***CONNECTED***" + Environment.NewLine + Port_Name + Environment.NewLine + Baud_Rate + " bps" + Environment.NewLine;
                        COMport.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

                        await Task.Delay(1000);
                        backgroundWorker7.RunWorkerAsync();

                        #region Textbox user input events
                        #endregion
                    }
                    else
                        MessageBox.Show("Port could not be opened!");
                }
                #region Port exceptions
                catch (UnauthorizedAccessException SerialException)
                {
                    MessageBox.Show(SerialException.ToString());
                    PictureBox_ConnectedStatus.BackColor = Color.Firebrick;
                    COMport = new SerialPort();
                }

                catch (System.IO.IOException SerialException)
                {
                    MessageBox.Show(SerialException.ToString());
                    PictureBox_ConnectedStatus.BackColor = Color.Firebrick;
                    COMport = new SerialPort();
                }
                catch (InvalidOperationException SerialException)
                {
                    MessageBox.Show(SerialException.ToString());
                    PictureBox_ConnectedStatus.BackColor = Color.Firebrick;
                    COMport = new SerialPort();
                }
                catch
                {
                    MessageBox.Show("ERROR in Opening Serial Port -- UnKnown ERROR");
                    PictureBox_ConnectedStatus.BackColor = Color.Firebrick;
                    COMport = new SerialPort();
                }
                #endregion
            }

По моему мнению, мне нужно COMport.Dispose() после того, как я поймаю исключение, чтобы оно очищало всю информацию внутри объекта, и когда я пытаюсь подключиться снова, оно выбрасывает в него новые значения.

...