问题如标题,代码如下:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
//定义变量
byte[] BufferBytes;
string[] Data; int Count;
Count = serialPort1.BytesToRead; //得到数据
BufferBytes = new Byte[Count];
serialPort1.Read(BufferBytes, 0, Count); for (int i = 0; i < Count; i++)
{
ReceivedString = ReceivedString + BufferBytes[i] + " ";
} Data = ReceivedString.Split(new string[] { " " }, StringSplitOptions.None); //获取10组数据进行比较,数据是分组的,len是一组长度
if (Data.Length > (len * 10 + 10))
{
if (Data[0] == "255" && Data[1] == "170")
{
CheckData(Data);
ReceivedString = "";
}
else
{
string[] a;
a = null;
do
{
if (a != null)
Data = a;
a = new string[Data.Length - 1];
Array.ConstrainedCopy(Data, 1, a, 0, Data.Length - 1);
}
while ((a[0] == "255" && a[1] == "170") == false);
Data = a;
CheckData(Data);
ReceivedString = "";
}
}
}
private void CheckData(string[] Data)
{
int max;
int mobilenumber;
max = 0;
mobilenumber = 0;
int i;
int curmobilenumber = 0;
//取场强最大的5组数
while (true)
{
for (int j = 0; j < 5; j++)
{
for (i = 0; i < len * 10; i = i + len)
{
//判断是否有数据丢失
if (Data[i] == Data[i + len])
{
//得到最大场强并记下
if (max < Convert.ToInt16(Data[i + len - 1]))
{
curmobilenumber = i; max = Convert.ToInt16(Data[i + len - 1]);
}
}
else
{
return;
}
}
if (max > 130)
{
Data[curmobilenumber + len - 1] = "0";
mobilenumber = Convert.ToInt16(Data[curmobilenumber + 2]) * 250 + Convert.ToInt16(Data[curmobilenumber + 3]);
str = Convert.ToString(Data[i + 4]);
list.Add(mobilenumber);
list1.Add(str);
max = 0;
}
} if (list.Count >= 1)
{
this.Invoke(new delegatechange(setinfo));
Thread.Sleep(10000);
}
}
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
//定义变量
byte[] BufferBytes;
string[] Data; int Count;
Count = serialPort1.BytesToRead; //得到数据
BufferBytes = new Byte[Count];
serialPort1.Read(BufferBytes, 0, Count); for (int i = 0; i < Count; i++)
{
ReceivedString = ReceivedString + BufferBytes[i] + " ";
} Data = ReceivedString.Split(new string[] { " " }, StringSplitOptions.None); //获取10组数据进行比较,数据是分组的,len是一组长度
if (Data.Length > (len * 10 + 10))
{
if (Data[0] == "255" && Data[1] == "170")
{
CheckData(Data);
ReceivedString = "";
}
else
{
string[] a;
a = null;
do
{
if (a != null)
Data = a;
a = new string[Data.Length - 1];
Array.ConstrainedCopy(Data, 1, a, 0, Data.Length - 1);
}
while ((a[0] == "255" && a[1] == "170") == false);
Data = a;
CheckData(Data);
ReceivedString = "";
}
}
}
private void CheckData(string[] Data)
{
int max;
int mobilenumber;
max = 0;
mobilenumber = 0;
int i;
int curmobilenumber = 0;
//取场强最大的5组数
while (true)
{
for (int j = 0; j < 5; j++)
{
for (i = 0; i < len * 10; i = i + len)
{
//判断是否有数据丢失
if (Data[i] == Data[i + len])
{
//得到最大场强并记下
if (max < Convert.ToInt16(Data[i + len - 1]))
{
curmobilenumber = i; max = Convert.ToInt16(Data[i + len - 1]);
}
}
else
{
return;
}
}
if (max > 130)
{
Data[curmobilenumber + len - 1] = "0";
mobilenumber = Convert.ToInt16(Data[curmobilenumber + 2]) * 250 + Convert.ToInt16(Data[curmobilenumber + 3]);
str = Convert.ToString(Data[i + 4]);
list.Add(mobilenumber);
list1.Add(str);
max = 0;
}
} if (list.Count >= 1)
{
this.Invoke(new delegatechange(setinfo));
Thread.Sleep(10000);
}
}
}
解决方案 »
- checkbox 单选 CS 结构的 不用JS写
- 怎么测试C#前台调用webservice的性能?
- VS自带的安装卸载程序 如何卸载前让其执行一个操作?
- 首先非常感谢李逍遥昨天解决我了的问题, 我今天还想问一个在PDA里面怎么样获取GPS的信息,很急!!!!!!!!!!!!
- Ajax为什么我Page.Response.Write将整个页面都转回去了
- .net里怎么没有ip地址控件??
- 使用c#能否编写输入法?能给一些流程或者参考资料吗?
- oracle存储过程中的默认参数,请问用OracleParameter怎么传参数?
- 配置文件问题?
- 请问,怎么声明和建立一个ArrayList的结构数组?
- 需要学它吗?
- 如何使用VS2003创建一个网站???
list1.Add(str); 这里你能通过吗?
在串口接收处理的线程里面是不能直接操作主窗体控件的.
Thread.Sleep(10000); 把这句去掉看看
为什么要停?
停止后,有数据到达可能也不触发DataReceived了!
serialPort控件,然后再双击事件DataReceived。