0
在我的應用程序中,我使用的是9600波特率串行連接,我希望使用115200波特率連接進行數據傳輸。將串行連接重置爲不同波特率後的異常
我已經從舊連接斷開並將其設置爲空值,並將串行連接設置爲具有不同波特率的新連接。
連接不穩定,我有時會得到System.ObjectDisposedException
- 我錯過了什麼?
連接碼
public string startConnection()
{
if (serial != null)
{
serial.Dispose();
}
foreach (string portname in SerialPort.GetPortNames())
{
serial = new SerialPort(portname, 9600, Parity.None, 8, StopBits.One);
serial.ReadTimeout = 5000;
serial.WriteTimeout = 5000;
serial.Handshake = System.IO.Ports.Handshake.None;
serial.NewLine = "\n";
string received = "";
try
{
serial.Open();
serial.DiscardInBuffer();
serial.Write(":09;BATTERY;");
Thread.Sleep(500);
received = serial.ReadLine();
if (received.Contains(";BATTERY;V="))
{
status = SERIAL_CONNECTED;
return portname;
}
}
catch (Exception err)
{
try
{
serial.Close();
status = DISCONNECTED;
}
catch (Exception)
{
// throw;
}
}
}
throw new Exception("couldn't connect to coms");
//return "couldn't connect to coms";
//this.Close();
}
斷開功能:
public void disconnect()
{
if (serial == null || serial.IsOpen==false ||status == DISCONNECTED)
return;
status = DISCONNECTED;
serial.Close();
serial = null;
}
主程序是:
private async void BurnOFP_click(object sender, RoutedEventArgs e)
{
startConnection();
some actions.............
disconnect();
var t = new Task(() =>
{
try
{
myUswm.startModemConnection(); // same but with different baud rate
}
catch (Exception e2) { MessageBox.Show(e2.Message); }
});
t.Start();
t.Wait();
modem = new XMODEM_FullDotNET(myUswm.getSerialPort(), XMODEM_FullDotNET.Variants.XModemCRC);
buff = File.ReadAllBytes(softwareFilePath_Text.Text);
if (buff.Length < 1)
{
MessageBox.Show("ERROR : wrong OFP file");
return;
}
if (myUswm.prepareOFPBurning()) // sends u to start transfer
{
if (isBurning == false)
{
isBurning = true;
modem._ProgressSent = 0;
myProgBar = new myProgressBar(modem);
myProgBar.StartTransfer(modem, buff.Length);
myProgBar.Show(); // show window
// got the Exception here!!!!!!!!!!
var t3 = new Task(() =>
{
modem.Send(buff);
});
............
}
else
MessageBox.Show("burning in progress..");
}
}
catch (Exception e1)
{
MessageBox.Show(e1.Message);
}
}
感謝您的幫助
你想用你的設備在9600波特率和115200波特率上進行通信嗎?你是否將設備UART更改爲支持115200? 這是什麼意思「不穩定」,你在哪裏得到'System.ObjectDisposedException'? 順便說一句 - 如果你只是等待它完成,爲什麼你使用異步任務的'myUswm.startModemConnection()'? – idanp
1.我改變了UART支持。 2.不穩定意味着有時我得到了異常,而不是。 3.關閉串行連接後,我得到異常,並在同一端口上用新的串行連接重新打開它。這是connect方法的一箇舊實現。在異步任務中沒有任何意義。 –