2014-02-06 2 views
0

Я создал приложение для чтения из последовательного порта, и он работает нормально. Но проблема возникает, когда я закрываю приложение и запускаю его снова. Вдруг чтение из последовательного порта перестает работать. Я должен отключить и подключить USB, чтобы исправить это.Чтение из SerialPort; Ошибка при закрытии и последующем открытии приложения

Это мой код:

namespace Serial 
{ 
    public partial class Main : Form 
    { 
     SerialPort mainSerialPort = new SerialPort(); 

     public Main() 
     { 
      InitializeComponent(); 
     } 

     delegate void SetTextCallback(string text); 

     private void buttonOpen_Click(object sender, EventArgs e) 
     { 

      mainSerialPort.PortName = "COM" + numericPort.Value.ToString(); 
      mainSerialPort.BaudRate = 115200; 
      mainSerialPort.Parity = Parity.None; 
      mainSerialPort.StopBits = StopBits.One; 
      mainSerialPort.DataBits = 8; 
      mainSerialPort.Handshake = Handshake.None; 
      mainSerialPort.DataReceived += DataReceived_Read; 

      try{ 
       mainSerialPort.Open(); 
      }catch (Exception ex){ 
       labelStatus.Text = ex.GetType().ToString(); 
      } 


      if (mainSerialPort.IsOpen == true){ 
       numericPort.BackColor = Color.Green; 
       labelStatus.Text = "Port je otevřen!"; 
      }else{ 
       numericPort.BackColor = Color.Red; 
      } 

     } 

     private void DataReceived_Read(object sender, SerialDataReceivedEventArgs e) 
     { 
      SerialPort mySerial = (SerialPort)sender; 

      if (this.InvokeRequired){ 
       listBoxRead.Invoke(new MethodInvoker(delegate { 
        listBoxRead.Items.Add(mySerial.ReadExisting()); 
        listBoxRead.SelectedIndex = listBoxRead.Items.Count - 1; 
       })); 
      } 

     } 

     private void Main_FormClosed(object sender, FormClosedEventArgs e) 
     { 
      mainSerialPort.DataReceived -= DataReceived_Read; 
      mainSerialPort.Close(); 
     } 
    } 
} 
+0

Вы должны ** установить свойства DtrEnable и RtsEnable, чтобы они были истинными, если вы не используете квитирование. Последовательное устройство обращает внимание на эти сигналы и отказывается отправлять что-либо, когда они выключены. –

+0

Спасибо, что вы! Ты обалденный! Он отлично работает;) – user3154659

ответ

0

USB и последовательные порты неуправляемых Ressources. Вы должны распорядиться им !. Простой «Закрыть» на FormClosed не будет делать то же самое.

+0

Close() и Dispose() делают ** точный ** то же самое. –

0

Я думаю, что это связано с некоторыми ресурсами, которые должным образом не освобождены. Попробуйте вызвать метод Dispose

mainSerialPort.Close(); 
mainSerialPort.Dispose(); 
+0

Я попробовал Dispose it and still nothing :( – user3154659

Смежные вопросы