系统需要连接地秤的串口,操作com3口,打开没问题,就是关闭本窗体的时候,整个程序也退出了,什么办法解决呢?代码如下:
打开的代码: StringBuilder t = new StringBuilder(255);
string path = Application.StartupPath + "\\cmocx.ini";
int i = GetPrivateProfileString("dicheng", "open", "", t, 255, path);//是否打开地秤
if (t.ToString() == "ok")
{
GetPrivateProfileString("dicheng", "ckh", "", t, 255, path);
serialPort1.PortName = t.ToString();// comboBox1.Text;//COM4
GetPrivateProfileString("dicheng", "botelv", "", t, 255, path); serialPort1.BaudRate = Convert.ToInt32(t.ToString());//速率
GetPrivateProfileString("dicheng", "csdw", "", t, 255, path); serialPort1.DataBits = Convert.ToInt32(t.ToString());//数据位又叫数据的传输单位。
serialPort1.StopBits = System.IO.Ports.StopBits.One;//停止位。
serialPort1.Parity = System.IO.Ports.Parity.None;//无奇偶校验位。
//无流控。(硬件设备)
//串口线配置,3-线通讯方式,TxD,Rxd,GND.
DialogResult dia = MessageBox.Show("地秤串口未正常打开", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dia == DialogResult.Yes)
{
try
{
serialPort1.Open();
serialPort1.RtsEnable = true;
}
catch
{
MessageBox.Show("地秤串口未正常打开", "系统警告", MessageBoxButtons.OK, MessageBoxIcon.Stop);
//this.Close();
txt_db.Text = "0";
}
}
}
else
txt_db.Text = "0";
DataReceive代码:private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
Thread.Sleep(300); //获取18个字节
int bytes = serialPort1.BytesToRead;
byte[] buffer = new byte[bytes];
serialPort1.Read(buffer, 0, bytes);
string str = "";
//将ASCII码装换为字符
for (int i = 0; i < bytes; i++)
{
string a1 = BitConverter.ToString(buffer, i, 1);
int a2 = Convert.ToInt32(a1, 16);
char a3 = (char)a2;
str += a3;
}
string[] ss = str.Split(':');
string jian = "";
if (ss.Length == 1)
{
jian = ss[ss.Length - 1].Substring(4, 6);
}
if (ss.Length > 1)
{
jian = ss[ss.Length - 2].Substring(4, 6);
}
//string jian = ss[ss.Length - 1].Substring(4, 6);
SetText(jian);
if (bytes > 18000)
{
serialPort1.DiscardInBuffer();
bytes = 0;
}
}
delegate void SetTextCallback(string text);
private void SetText(string text)
{ if (this.txt_db.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
this.txt_db.Text = text.Trim();
return; }
窗体关闭的时候的代码 serialPort1.Close();
串口
打开的代码: StringBuilder t = new StringBuilder(255);
string path = Application.StartupPath + "\\cmocx.ini";
int i = GetPrivateProfileString("dicheng", "open", "", t, 255, path);//是否打开地秤
if (t.ToString() == "ok")
{
GetPrivateProfileString("dicheng", "ckh", "", t, 255, path);
serialPort1.PortName = t.ToString();// comboBox1.Text;//COM4
GetPrivateProfileString("dicheng", "botelv", "", t, 255, path); serialPort1.BaudRate = Convert.ToInt32(t.ToString());//速率
GetPrivateProfileString("dicheng", "csdw", "", t, 255, path); serialPort1.DataBits = Convert.ToInt32(t.ToString());//数据位又叫数据的传输单位。
serialPort1.StopBits = System.IO.Ports.StopBits.One;//停止位。
serialPort1.Parity = System.IO.Ports.Parity.None;//无奇偶校验位。
//无流控。(硬件设备)
//串口线配置,3-线通讯方式,TxD,Rxd,GND.
DialogResult dia = MessageBox.Show("地秤串口未正常打开", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dia == DialogResult.Yes)
{
try
{
serialPort1.Open();
serialPort1.RtsEnable = true;
}
catch
{
MessageBox.Show("地秤串口未正常打开", "系统警告", MessageBoxButtons.OK, MessageBoxIcon.Stop);
//this.Close();
txt_db.Text = "0";
}
}
}
else
txt_db.Text = "0";
DataReceive代码:private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
Thread.Sleep(300); //获取18个字节
int bytes = serialPort1.BytesToRead;
byte[] buffer = new byte[bytes];
serialPort1.Read(buffer, 0, bytes);
string str = "";
//将ASCII码装换为字符
for (int i = 0; i < bytes; i++)
{
string a1 = BitConverter.ToString(buffer, i, 1);
int a2 = Convert.ToInt32(a1, 16);
char a3 = (char)a2;
str += a3;
}
string[] ss = str.Split(':');
string jian = "";
if (ss.Length == 1)
{
jian = ss[ss.Length - 1].Substring(4, 6);
}
if (ss.Length > 1)
{
jian = ss[ss.Length - 2].Substring(4, 6);
}
//string jian = ss[ss.Length - 1].Substring(4, 6);
SetText(jian);
if (bytes > 18000)
{
serialPort1.DiscardInBuffer();
bytes = 0;
}
}
delegate void SetTextCallback(string text);
private void SetText(string text)
{ if (this.txt_db.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
this.txt_db.Text = text.Trim();
return; }
窗体关闭的时候的代码 serialPort1.Close();
串口
解决方案 »
- 打开文件后,conn链接打开出现问题,提示路径出问题。请问高手怎么解决?
- C#开发掩码输入文本框 请教
- winform 的问题:数据变改后,多个绑定的DataGrid的数据怎么能自动更新?
- 内存映射后,调用UnmapViewOfFile后为什么会ERROR_ALREADY_EXISTS
- 简单问题
- Delphi 归来 频繁版本升级的 .net 还有发展 么 ?(100分开帖讨论)
- webbrowser显示一个网页,然后在网页中点击后,我想在form中有响应,可以在form中做接下去的操作
- C#中如何实现用户控件的键盘事件?
- 请问在DataTable视图中如何定义时间类型的字段(yyyy-MM-dd-HH-mm),而且在“UserList.worktable.Select()”语句中如何比较这个字段的时
- 请问 .net reflector 的vs插件有什么用
- wpf image绑定图片路径 删除时出现正由另一进程使用,因此该进程无法访问此文件
- 如下代码所示,如何实现点击button后能取到textblock的值
serialPort1.DataReceived-=serialPort1_DataReceived;
serialPort1.Close();现在的学生写代码也太不让人省心了。