本店供应全双工蓝牙串口模块,无线串行数据收发,解决线缆通讯干扰,传输距离更远。设备
间数据无线收发、无线遥控、机器人制作必不可少!
无线USB通讯、无线串行通讯,了解详情请进入:http://shop59304983.taobao.com
";
tbxData.Text = "";
btnUpdateSet.Hide();
richTextBox1.Text = "苏龙电子配件店:http://shop59304983.taobao.com";
foreach (var s in SerialPort.GetPortNames())
{
cbxCom.Items.Add(s);
}
cbxTencoding.SelectedIndex = 0;
}
private void
cbxCom_SelectedIndexChanged(object sender, EventArgs e)
{
var comboBox = ((ComboBox) sender);
if (comboBox.SelectedIndex == -1)
{
return;
}
_portName = comboBox.SelectedItem.ToString();
if (_thSendData != null)
{
_inSend = false;
_inAutoSend = false;
try
{
_thSendData.Abort();
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
}
if (_thRead != null)
{
_inRead = false;
try
{
_thRead.Abort();
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
}
if (_serialPort != null)
{
_serialPort.Close();
}
try
{
LoadPortDefault();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
InitPort();
_thRead = new Thread(ReadData);
//_thCheckStatus.Start();
_inRead = true;
_thRead.Start();
_thSendData = new Thread(SendData);
_inSend = true;
_thSendData.Start();
}
private Encoding
GetSendEncoding()
{
switch (cbxTencoding.SelectedIndex)
{
case 0:
return Encoding.ASCII;
case 1:
return Encoding.BigEndianUnicode;
case 2:
return Encoding.Default;
case 3:
return Encoding.Unicode;
case 4:
return Encoding.UTF32;
case 5:
return Encoding.UTF7;
case 6:
return Encoding.UTF8;
}
return Encoding.ASCII;
}
private SerialPort
InitPort()
{
if (string.IsNullOrEmpty(_portName))
{
throw new NoNullAllowedException(@"串口名称不能为空!");
}
_serialPort = new SerialPort(_portName);
_serialPort.Open();
return _serialPort;
}
/*****************************************************************************/
//更新设备参数
/*****************************************************************************/
/* private void SetPort()
{
_serialPort.BaudRate =
int.Parse(cbxBaudRate.SelectedItem.ToString());
_serialPort.BreakState = cbxBreakState.SelectedIndex == 0;
_serialPort.DataBits =
int.Parse(cbxDataBits.SelectedItem.ToString());
_serialPort.DiscardNull = cbxDiscardNull.SelectedIndex == 0;
//_serialPort.Encoding =
Encoding.GetEncoding(cbxEncoding.SelectedItem.ToString());
_serialPort.Handshake = (Handshake) Enum.Parse(typeof (Handshake),
cbxHandshake.SelectedItem.ToString());
_serialPort.Parity = (Parity) Enum.Parse(typeof (Parity),
cbxParity.SelectedItem.ToString());
//_serialPort.PortName = _portName;
_serialPort.ReadTimeout = (int) numReadTimeout.Value;
_serialPort.WriteTimeout = (int) numWriteTimeout.Value;
_serialPort.RtsEnable = cbxRtsEnable.SelectedIndex == 0;
_serialPort.StopBits = (StopBits) Enum.Parse(typeof (StopBits),
cbxStopBits.SelectedItem.ToString());
_serialPort.DtrEnable = cbxDtrEnable.SelectedIndex == 0;
}
*/
private void
LoadPortDefault()
{
if (string.IsNullOrEmpty(_portName))
{
throw new NoNullAllowedException(@"串口名称不能为空!");
}
using (_serialPort = new SerialPort(_portName))
{
_serialPort.Open();
InitCbxSelected(cbxBaudRate, _serialPort.BaudRate);
cbxBreakState.SelectedIndex = _serialPort.BreakState ? 0 : 1;
InitCbxSelected(cbxDataBits, _serialPort.DataBits);
cbxDiscardNull.SelectedIndex = _serialPort.DiscardNull ? 0 : 1;
//InitCbxSelected(cbxEncoding, _serialPort.Encoding.EncodingName);
InitCbxSelected(cbxHandshake, _serialPort.Handshake);
InitCbxSelected(cbxParity, _serialPort.Parity);
numReadTimeout.Value = _serialPort.ReadTimeout;
numWriteTimeout.Value = _serialPort.WriteTimeout;
cbxRtsEnable.SelectedIndex = _serialPort.RtsEnable ? 0 : 1;
InitCbxSelected(cbxStopBits, _serialPort.StopBits);
cbxDtrEnable.SelectedIndex = _serialPort.DtrEnable ? 0 : 1;
}
}
private static void
InitCbxSelected(ComboBox cbx, object value)
{
if (value == null)
{
return;
}
var isMatch = false;
for (var i = 0; i < cbx.Items.Count; i++)
{
if (value.ToString() == cbx.Items[i].ToString())
{
cbx.SelectedIndex = i;
isMatch = true;
}
}
if (!isMatch)
{
cbx.Items.Add(value.ToString());
cbx.SelectedIndex = cbx.Items.Count - 1;
}
}
private void
btnSend_Click(object sender, EventArgs e)
{
if (cbxCom.SelectedIndex == -1)
{
MessageBox.Show(@"请选择串口");
return;
}
_sleepTime = (int) numSleep.Value;
_sendData = tbxData.Text.Split(new[] {"\r\n"},
StringSplitOptions.RemoveEmptyEntries);
_isCycle = cbxCycle.Checked;
_sendEncoding = GetSendEncoding();
_sendAsHex = cbxHex.Checked;
_buffer = new byte[_sendData.Length][];
if (_sendAsHex)
{
for (var j = 0; j < _sendData.Length; j++)
{
var str = _sendData[j];
if (str.Length%2 != 0)
{
str = '0' + str;
}
_buffer[j] = new byte[str.Length/2];
var bindex = 0;
for (var i = 0; i < str.Length; i += 2)
{
var temp = str.Substring(i, 2);
_buffer[j][bindex++] = byte.Parse(temp, NumberStyles.HexNumber);
}
}
}
else
{
for (var j = 0; j < _sendData.Length; j++)
{
_buffer[j] = _sendEncoding.GetBytes(_sendData[j]);
}
}
if (!_inAutoSend)
{
//InitPort();
_inAutoSend = true;
btnSend.Text = @"停止(&S)";
}
else
{
_inAutoSend = false;
//try
//{
// _thSendData.Join();
//}
//catch (Exception exception)
//{
// Console.WriteLine(exception);
//}
btnSend.Text = @"发送(&S)";
}
}
//private void
CheckStatus()
//{
// try
// {
// while (_serialPort !=
null && _inSend)
// {
//
this.Invoke(new EventHandler(delegate
//
{
//
lblBytesToRead.Text = _serialPort.BytesToRead.ToString();
//
lblBytesToWrite.Text = _serialPort.BytesToWrite.ToString();
//
lblCDHolding.Text = _serialPort.CDHolding.ToString();
//
lblDsrHolding.Text = _serialPort.DsrHolding.ToString();
//
lblIsOpen.Text = _serialPort.IsOpen.ToString();
//
}));
//
Thread.Sleep(500);
// }
// }
//
catch (Exception ex)
// {
// this.Invoke(new
EventHandler(delegate { MessageBox.Show(ex.ToString()); }));
// }
//
finally
// {
// this.Invoke(new
EventHandler(delegate { lblIsOpen.Text = @"False"; }));
// }
//}
private void SendData()
{
try
{
//_serialPort.Open();
&