我在我的筆記本電腦上,現在無法檢查,我想知道是否打開COM2連接,併爲COM2端口添加接收事件,然後通過「serial.Close()」關閉COM2連接該程序,我仍然能夠在COM2端口上收到接收事件?假設它仍然可以接收,我想我會在接收事件中打開COM2端口連接並讀取數據,可以這樣做嗎?當COM端口關閉時是否可以接收COM端口事件?
SerialPort serial = new SerialPort()
{
PortName = "com2",
BaudRate = 9600,
Handshake = System.IO.Ports.Handshake.None,
Parity = Parity.None,
DataBits = 8,
StopBits = StopBits.One,
ReadTimeout = 400,
WriteTimeout = 200,
};
serial.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Receive);
private void Receive(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
using (SerialPort serialPort = serial)
{
if (serialPort.IsOpen)
serialPort.Close();
try
{
serialPort.Open();
received_data = serialPort.ReadExisting();
Dispatcher.Invoke(DispatcherPriority.Send, new UpdateUiTextDelegate(WriteMyData), received_data);
}
catch (Exception ex)
{
}
finally
{
if (serialPort != null)
{
if (serialPort.IsOpen)
{
serialPort.Close();
}
Thread.Sleep(5);
//serialPort.Dispose();
}
Thread.Sleep(5);
}
}
}
public void SerialCmdSendByte(byte[] hexstring)
{
using (SerialPort serialPort = serial)
{
if (serialPort.IsOpen)
serialPort.Close();
try
{
serialPort.Open();
foreach (byte hexval in hexstring)
{
byte[] _hexval = new byte[] { hexval };
serialPort.Write(_hexval, 0, 1);
Thread.Sleep(3);
}
}
catch (IOException ex)
{
}
finally
{
if (serialPort != null)
{
if (serialPort.IsOpen)
{
serialPort.Close();
}
Thread.Sleep(5);
//serialPort.Dispose();
}
Thread.Sleep(5);
}
}
}
的想法是,當我想從C#程序發送和關閉它直客場只打開一個連接,但相同的COM端口實際上是需要監聽從基於PIC的微控制器通信。目前我們遇到的問題是,以前程序從未嘗試關閉連接(與上面的代碼不同),但有時基於PIC的微控制器的接收部分工作正常,但程序的發送部分不起作用。這隻發生在某個時間,通常程序工作正常...
重新啓動系統似乎重置此確定。所以我想在上面的代碼會幫助我的情況(能夠發送,並在同一個COM端口上收聽)?
串行端口的操作方式如下:打開(並保持打開),通信,關閉。如果它關閉 - 你沒有收到任何東西,也不能發送。您必須仔細研究爲什麼微控制器在重新啓動(從PC發送工作,因爲它在復位後工作)之前不會接收信號,這可能是固件中的錯誤。 – Sinatr
感謝Sinatr和其他人幫助我,我專注於Windows應用程序而不是PIC控制器程序。我清理代碼並在這裏和那裏放一些延遲,縮短通信電纜,擰緊連接器連接,並檢查控制器接收溢出並清除它,所以現在可以了......感謝您的幫助! – user3663854