日期:2014-05-18  浏览次数:20744 次

C#串口问题
各位高手 我有一个串口问题向大家请教,我在窗体的load事件中加入这样几句话 {
  comm.NewLine = "/r/n";
  comm.PortName = "COM4";
  comm.BaudRate = 115200;
  try
  {
  comm.Open();

  }
  catch (Exception ex)
  {
  //捕获到异常信息,创建一个新的comm对象,之前的不能用了。  
  comm = new SerialPort();
  //现实异常信息给客户。  
  MessageBox.Show(ex.Message);
  }
  comm.DataReceived += comm_DataReceived; }然后在DataReceive中主要代码如下
void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
  {
   
  try
  {
  Listening = true;  
  int n = comm.BytesToRead;
  byte[] buf = new byte[n];  
  comm.Read(buf, 0, n); }
当我关闭窗体时在窗体的closed事件中又这样操作
{
  try
  {
  comm.Close();
   

  }
  catch (Exception ex)
  {
  //捕获到异常信息,创建一个新的comm对象,之前的不能用了。  
  comm = new SerialPort();
  //现实异常信息给客户。  
  MessageBox.Show(ex.Message);
  }  
} 结果给我的提醒是端口被关闭,结果就退不出程序了,而不关串口,关闭窗口后,又提醒我有异常,无法访问以释放的对象,我怀疑是 comm.DataReceived += comm_DataReceived;这句话的问题,可是怎么也调不通了,请各位高手指教一下,小弟感激不尽了。

------解决方案--------------------
在comm.Open()或Close()之前判断comm是否已打开。然后再操作。

Listening = true;
这句话用不着。
你要是参考别人的程序,全搞明白,再用。
------解决方案--------------------
端口用完后,先关闭了
------解决方案--------------------
把comm = new SerialPort();都去掉,你每用一次它前面的初始化就没用了
------解决方案--------------------
或者用一次comm = new SerialPort(),把它放在最上面