谢谢二楼的朋友!
我在"DataReceived"事件里有些代码,比如:
......
string cardnum;
cardnum=textCardnum.text;
......
那现在又该如何写呢? 烦请告知!
刚上面那个问题解决了,不是eventargs,而是EventArgs
但改个以后程序还是不行,这里我提出两个疑问:
1.串口的标准事件程序是这样的
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
......
}
2.4楼说的:
public void CallDataReceived(object sender,eventargs e)
{
把执行代码放这里
}
那CallDataReceived是什么意思啊,是不是调用串口接收事件那程序啊?
请指教哟,多谢谢了!
哈哈,"chenjin145"是正解,多些你的热心!
但又出现了下面的问题:
我在下面程序里加上了我自己的代码:
public void CallDataReceived(object sender,eventargs e)
{
// 把执行代码放这里
//从串口取出数据:
this.textCardnum.text=串口取出数据;
}
然后发现该窗体上的textCardnum控件只接收到串口的后几位数据388~,而正常情况下应该接收~0200500388~,我仔细观察才发现,textCardnum是在该事件中赋了两次值:第一次是~0200500,第二次是388~,所以textCardnum控件显示的是388~,如此便不能读出正常的数据;不知道是我串口设置错了,还是从串口去数据时候的代码有错,请知道的朋友告诉我了!先谢谢了
现在我就是怀疑设备分两次发送,这正是我不想发生的事情了!如此搞得我程序有很大的问题:因为我本想一次性读出卡号,然后在触发事件里判断是是否合法,合法的弹出会员消费窗体,非法的就弹出警告框,现在因为分两次发送,第一次读出的卡号肯定是不正确的,从而弹出非法警告框,但是该卡明明是合法的,是不应该提示非法的!
我按照 chenjin145 朋友写的程序如下:因为设备将ID卡的数据分两次发送,正确卡号也会弹出警告框,不知道该怎么解决,希望高手们提点解决问题的方法,特别是 chenjin145 朋友,你可要帮帮我啊!
顺便提示一下:ID卡里标准数据是0015002038,我在测试项目的时候,第一次接收到的是0015002;第二次读出的是38,
源程序关键代码如下:
public delegate void DataReceivedDelegate(object sender, EventArgs e);
private void serialPort1_DataReceived(object sender, EventArgs e)
{
Invoke(new DataReceivedDelegate(CallDataReceived), new object[] { sender, e });
}
public void CallDataReceived(object sender, EventArgs e)
{
if (this.serialPort1.BytesToRead > this.serialPort1.ReceivedBytesThreshold)
{
//从串口读数据
char[] data = new char[10];
this.serialPort1.Read(data, 0, 10);
StringBuilder sb = new StringBuilder();
sb.Append(data);
this.textCardnum.Text += sb.ToString();
//将""替换掉,将正确的卡号重写到textCadenum控件
string cardnum = textCardnum.Text.Replace("", "");
string cardnum1 = cardnum.Replace("", "");
textCardnum.Text = cardnum1;
//从数据库查询该卡号是否合法
string sql1 = "select guest_id from guest where guest_cardnum=" + cardnum1 + "";
//如果是合法的卡号则弹出客户消费页面,haverow是个判断是否有记录的函数!
if (haverow(sql1) == true)
{
Xf xf;
xf = new Xf(this.textCardnum);
xf.ShowDialog();
}
//如果是非法的卡号则弹出警告框
else
{
MessageBox.Show("该卡是非法卡", "警告");
textCardnum.Text = "";
}
}
}