这几天在用SerialPort写一个串口调试程序 ,串口调试程序有两种发送方式,一种是文本发送,另一种是16进制发送。在写16进制发送方式时,有开启一个线程,用于实时检测发送数据格式的合法性,并把发送区的字符串转化成对应的字节数组。不过在调试过程中,会导致UI线程速度很慢。
以下是我写的程序:
private Thread CheckSendDataType;
CheckSendDataType = new Thread(new ThreadStart (CheckSendData));创建一个线程,用于识别发送区的数据格式
//创建一个线程,用于识别发送区的数据格式
private void CheckSendData()
{
while (true) //线程一直运行的标志
{
if (bSendHex == true)
{
if (strSendData != "")
{
try
{
Monitor.Enter(this);
//加入格式检测代码
bValidData = true;
foreach (char chrTemp in strSendData) //检测是否是16进制的字符
{
if (chrTemp == 0x20)
continue;
else if (chrTemp >= 0x30 && chrTemp <= 0x39)
continue;
else if (chrTemp >= 0x41 && chrTemp <= 0x46)
continue;
else if (chrTemp >= 0x61 && chrTemp <= 0x66)
continue;
else
{
bValidData = false;
break;
}
}
if (bValidData == true)
{
try
{
String[] strData = strSendData.Split(Convert.ToChar(0x20));
int index, intCount = strData.Length;
byte[] bytDataTemp = new byte[intCount];
for (index = 0; index < intCount; index++)
{
if (strData[index].Length > 2) //每个16进制数据最多2个字符。
{
bValidData = false;
break;
}
}
if (bValidData == true)
{
for (index = 0; index < intCount; index++)
{
bytDataTemp[index] = Convert.ToByte(strData[index], 16);//把字符串转化成对应的字节数组
}
bytSendData = bytDataTemp;
bValidData = true;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
bValidData = false;
}
finally
{
}
}
}
catch (Exception ex) { Console.WriteLine(ex.Message); }
finally
{
Monitor.Exit(this);
}
}
}
}
}
//选择16进制发送方式,启动检测数据线程,并置位16进制发送标志。
private void chkSendHex_CheckedChanged(object sender, EventArgs e)
{
if (bComOpen == true)
{
if (chkSendHex.Checked == true)
{
if (CheckSendDataType.ThreadState == ThreadState.Unstarted)
CheckSendDataType.Start();
bSendHex = true;
}
else
bSendHex = false;
}
}
//只要发送区的文本发生变化就触发事件。发现:这样的话会使得UI线程变得很慢。
private void txtSend_TextChanged(object sender, EventArgs e)
{
if (bComOpen == true)
{
try
{
Monitor.Enter(this);
strSendData = txtSend.Text;
}
catch (Exception ex) { Console.WriteLine(ex.Message); }
finally
{
Monitor.Exit(this);
}
}
}
其实,自己对应该在怎么时候启动检测数据格式线程比较合适,和对线程实行过程的设计也不是很清楚。不知道哪位网友有什么好的想法,可以指教一下偶。