Я обнаружил ошибку в своем коде при попытке открыть порт, когда он уже открыт. Сначала выдается исключение 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()
после того, как я поймаю исключение, чтобы оно очищало всю информацию внутри объекта, и когда я пытаюсь подключиться снова, оно выбрасывает в него новые значения.