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方法的一个旧实现。在异步任务中没有任何意义。 –