问题描述
我的代码如下privatevoidForm2_Load(objectsender,EventArgse){label7.Text="登陆单位机构代码:"+strB;this.label1.AutoSize=true;this.label1.AutoEllipsis=true;serialPort1.Close();}privatevoidSetLabel(stringtext){if(label1.InvokeRequired){SetlabelCallbackd=newSetlabelCallback(SetLabel);this.Invoke(d,newobject[]{text});}else{label1.Text=text;textBox1.Clear();textBox2.Clear();textBox3.Clear();richTextBox1.Clear();richTextBox2.Clear();string[]sArray=label1.Text.Trim().Split('#');label1.Text="";if(sArray[0].Length==9){textBox1.Text=sArray[0];textBox2.Text=sArray[1];textBox3.Text=sArray[2];richTextBox1.Text=sArray[3];richTextBox2.Text=sArray[4];}else{label1.Text="";MessageBox.Show("请重新扫描正确的二维条码!");}}}privatevoidserialPort1_DataReceived(objectsender,System.IO.Ports.SerialDataReceivedEventArgse){str="";try{str=serialPort1.ReadTo("@#");SetLabel(str);}catch{MessageBox.Show("读取数据出错!");}}privatevoidbutton1_Click(objectsender,EventArgse){if(comboBox1.Text.Trim().Length==0){MessageBox.Show("请选择端口号");}else{this.serialPort1.Close();this.serialPort1.PortName=comboBox1.Text;this.serialPort1.RtsEnable=true;this.serialPort1.Encoding=System.Text.Encoding.Default;try{this.serialPort1.Open();MessageBox.Show("端口打开成功!");button1.Enabled=false;}catch{MessageBox.Show("您选择的com口不存在!");}}}privatevoidbutton3_Click(objectsender,EventArgse){{if(serialPort1.IsOpen){MessageBox.Show("关闭成功!");}}}用readto读取数据后,用button3关闭com口,结果总是报错
解决方案
解决方案二:
错误提示呢?
解决方案三:
沙发错误提示呢?
解决方案四:
调试的时候,关闭的时候总是先跳到privatevoidserialPort1_DataReceived(objectsender,System.IO.Ports.SerialDataReceivedEventArgse){str="";try{str=serialPort1.ReadTo("@#");SetLabel(str);}catch{MessageBox.Show("读取数据出错!");}中catch部分,然后就不动了编译之后运行好像还可以
解决方案五:
不好意思,button3里落下一句serialPort1.Close();
解决方案六:
晕,我也碰到这个问题,原因是当窗口关闭时DataReceived中的线程还在运行。但我现在还没解决掉这个问题