DataReceived
事件中获取到数据然后进行数据库处理。
给你一个获取串口数据的方法
private string GetUnlockData(SerialPort serialPort)
{
string orderNum
char[] orderNumChar = new char[30]
if (this.GetPartNo(serialPort) != this._partNo)
return string.Empty
serialPort.Read(orderNumChar, 0, orderNumChar.Count())
orderNum = this.ConverLeterCharArrayTOString(orderNumChar)//将从COM口读到的字符数组转换为字符口串
return orderNum
}
不知道你说的串口是指的端口还是真的串口,我两个都简单的说一下吧,供你参考。.NET 已经提供的serialPort类,封装了串口的基本 *** 作,如果你电脑上安装的是 VISUAL SUDIO,那么你看看帮助文档就可以找到很详细的介绍,还有实例源码供参考。MSDN上也有非常详细的介绍。
关于后台监听的问题,这个可以这样实现,首先,在程序中调用serialport的open方法,先将这个串口打开,然后在串口的DataReceived事件里面编写你的处理写入数据的代码就可以了。
下面是我写的通过短信猫发送短信的部分函数,其中也有写入数据库的功能,供你参考。
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
try
{
string str = ""
//PDUdecoding SendSMS = new PDUdecoding()
Thread.Sleep(200)
str = serialPort.ReadExisting()
DebugReceived(str)
if (str.Contains("+CMTI"))
{
string[] SMSSns = new string[100]
SMSSns = str.Split((char)44)
string smssn = SMSSns[1]
serialPort.Write("AT+CMGR=" + smssn + "\r")
Thread.Sleep(100)
//Tools.ShowMessage(smssn, MessageBoxIcon.Information)
}
//处理初始化命令
if (str.Contains("AT+CPMS=\"MT\",\"SM\",\"ME\"\r"))
{
Tools.Is_SerialPort_Inited = true
}
if (str.Contains("+CMGR:") &&str.Contains("OK"))
{
string[] strs = str.Split((char)10)
string SMSContent = ""
string Number = ""
string date = ""
if (strs[2].Contains("08"))
{
SMSContent = RecSMS.GetContent(strs[2])
Number = RecSMS.GetTelphone(strs[2])
date = RecSMS.GetDataTime(strs[2])
DebugSMSLog("*************************************************************",Color.Black,false)
DebugSMSLog("收到新短信!\r\n", Color.Blue, true)
DebugSMSLog("内容:\r\n" + SMSContent + "\r\n发送人:" + Number + "\r\n发送时间:" + date, Color.Blue, false)
DebugSMSLog("*************************************************************\r\n", Color.Black, false)
if (SMSContent.Contains("DW+"))
{
string CarNumber = ""
string CarPW = ""
string[] CarLoactionInfo = SMSContent.Split('+')
if (CarLoactionInfo.Length >2)
{
CarNumber = CarLoactionInfo[1]
CarPW = CarLoactionInfo[2]
Set_Info_To_Send_ToClient(Number, CarNumber, CarPW)
}
}
}
//Tools.ShowMessage("注意,收到短信!\r内容:" + SMSContent + "\r发送人:" + Number + "\r发送时间:" + date + "\r", MessageBoxIcon.Information)
}
//判断是否可以写入短信内容
if (str != "" &&str.Contains("AT+CMGS=") &&str.Contains(">"))
{
Tools.CanWriteSMSContentToSerialPort = true
}
//短信发送失败
if (str != "" &&str.Contains("ERROR"))
{
Tools.IsSMSSendSuccess = false
}
//短信发送成功
if (str != "" &&str.Contains("+CMGS:"))// &&Tools.SendSMSBZ)
{
if (str.Contains("OK"))
{
SentSMSNumber++
StatusSMS.Text = "已发送" + SentSMSNumber.ToString() + "条定位信息"
DebugSMSLog(System.DateTime.Now.ToString() + " 发送成功! ",Color.Green,true)
DebugSMSLog("##############################################################", Color.Black,false)
StatusSMS.ForeColor = Color.Green
Tools.IsSMSSendSuccess = true
}
if (str.Contains("ERROR"))
{
DebugSMSLog(System.DateTime.Now.ToString() + " 请注意:该条短信发送失败! ",Color.Red,true)
DebugSMSLog("##############################################################", Color.Black,false)
}
}
}
catch
{
}
}
请注意,DataReceived事件默认异步处理的,也就是说,该事件中的处理代码和主线程不一样的,如果涉及到在该事件中要更新界面或跨线程访问窗口控件的话,则要采用委托的方式,具体方法可以参考多线程编程。
好久没来百度知道了,为了你这个问题,我还把我以前做的CS程序打开详细研究了一番,希望能够抛砖引玉,对你有所帮助。
数值是没有必要分几进制的,它在内存中就是二进制保存的。只是为了方便人们查看,可以转为n进制的格式显示在文本框中进行显示的。所以
1 buf 就不要转为字符串了,直接以二进制格式存入数据库。下次也是以二进制的形式取出(就是byte[])
2 richTextBox1 要显示二进制也好,16进制也好 根据实际需要决定。象你上面的例子,builder 中的内容直接插入到richTextBox1中就好了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)