110,571
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Windows.Forms;
namespace vs_ComHelper
{
/// <summary>
/// SerialPort类的二次封装
/// </summary>
public class MyCom
{
public SerialPort m_serialPort;
/// <summary>
/// 正在关闭串口标志量
/// </summary>
public bool m_bClosing;
/// <summary>
///串口正在接收数据标志量
/// </summary>
public bool m_bReceiving;
/// <summary>
/// 定义接收委托类型
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
public delegate void delegate_ReceiveHandler(object sender, SerialDataReceivedEventArgs args);
/// <summary>
/// 定义接收委托变量
/// </summary>
private delegate_ReceiveHandler m_SerailReceiveHandler;
/// <summary>
/// 自定义串口类的构造函数
/// </summary>
/// <param name="port"></param>
public MyCom(SerialPort port, delegate_ReceiveHandler handler)
{
m_serialPort = port;
m_SerailReceiveHandler = handler;
m_bClosing = false;
m_bReceiving = false;
m_serialPort.Close();
}
/// <summary>
/// 串口接收处理函数
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
private void port_ReceiveHandler(object sender, SerialDataReceivedEventArgs args)
{
if(m_bClosing) return;
m_bReceiving = true;
m_SerailReceiveHandler(sender, args);
m_bReceiving = false;
}
/// <summary>
/// 判断串口是否打开
/// </summary>
/// <returns></returns>
public bool IsOpen()
{
return m_serialPort.IsOpen;
}
/// <summary>
/// 打开或者关闭串口
/// </summary>
/// <param name="com"></param>
/// <param name="baud"></param>
/// <returns></returns>
public string openOrClose(string com, string baud)
{
bool ret = false;
string str = string.Empty;
try
{
if (m_serialPort.IsOpen == false)
{
ret = openComPort(com, baud);
}
else
{
//serialPort1.Close();
//serialPort1.DiscardInBuffer();
ret = !closeComPort();
}
}
catch (Exception er)
{
MessageBox.Show(er.Message);
}
if (ret == false)
str = "打开";
else
str = "关闭";
return str;
}
/// <summary>
/// 打开串口
/// </summary>
/// <param name="portName"></param>
/// <param name="baud"></param>
/// <returns></returns>
public bool openComPort(string portName, string baud)
{
bool ret = false;
if(m_serialPort == null) return false;
try
{
m_serialPort.PortName = portName;
m_serialPort.BaudRate = Convert.ToInt32(baud);
m_serialPort.Open();
m_serialPort.DataReceived += new SerialDataReceivedEventHandler(port_ReceiveHandler);
ret = true;
}
catch(Exception er)
{
MessageBox.Show(er.Message);
}
return ret;
}
/// <summary>
/// 关闭串口
/// </summary>
/// <returns></returns>
public bool closeComPort()
{
if (m_serialPort == null) return false;
bool ret = false;
try
{
if(m_serialPort.IsOpen)
{
m_bClosing = true;
//处理Windows消息
while (m_bReceiving) Application.DoEvents();
m_serialPort.Close();
m_bClosing = false;
}
ret = true;
}
catch(Exception er)
{
}
return ret;
}
/// <summary>
/// 发送字符串
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public bool send(string str)
{
if (m_serialPort.IsOpen == false) return false;
m_serialPort.Write(str);
return true;
}
/// <summary>
/// 发送16进制数,发送函数重载
/// </summary>
/// <param name="byData"></param>
/// <param name="ofs">发送数据偏移量</param>
/// <param name="len">发送数据长度</param>
/// <returns></returns>
public bool send(byte[] byData, int ofs, int len)
{
if (m_serialPort.IsOpen == false) return false;
m_serialPort.Write(byData, ofs, len);
return true;
}
}
}
多谢[/quote]
哈,我没注意有新的消息过来,解决了就好
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Windows.Forms;
namespace vs_ComHelper
{
/// <summary>
/// SerialPort类的二次封装
/// </summary>
public class MyCom
{
public SerialPort m_serialPort;
/// <summary>
/// 正在关闭串口标志量
/// </summary>
public bool m_bClosing;
/// <summary>
///串口正在接收数据标志量
/// </summary>
public bool m_bReceiving;
/// <summary>
/// 定义接收委托类型
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
public delegate void delegate_ReceiveHandler(object sender, SerialDataReceivedEventArgs args);
/// <summary>
/// 定义接收委托变量
/// </summary>
private delegate_ReceiveHandler m_SerailReceiveHandler;
/// <summary>
/// 自定义串口类的构造函数
/// </summary>
/// <param name="port"></param>
public MyCom(SerialPort port, delegate_ReceiveHandler handler)
{
m_serialPort = port;
m_SerailReceiveHandler = handler;
m_bClosing = false;
m_bReceiving = false;
m_serialPort.Close();
}
/// <summary>
/// 串口接收处理函数
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
private void port_ReceiveHandler(object sender, SerialDataReceivedEventArgs args)
{
if(m_bClosing) return;
m_bReceiving = true;
m_SerailReceiveHandler(sender, args);
m_bReceiving = false;
}
/// <summary>
/// 判断串口是否打开
/// </summary>
/// <returns></returns>
public bool IsOpen()
{
return m_serialPort.IsOpen;
}
/// <summary>
/// 打开或者关闭串口
/// </summary>
/// <param name="com"></param>
/// <param name="baud"></param>
/// <returns></returns>
public string openOrClose(string com, string baud)
{
bool ret = false;
string str = string.Empty;
try
{
if (m_serialPort.IsOpen == false)
{
ret = openComPort(com, baud);
}
else
{
//serialPort1.Close();
//serialPort1.DiscardInBuffer();
ret = !closeComPort();
}
}
catch (Exception er)
{
MessageBox.Show(er.Message);
}
if (ret == false)
str = "打开";
else
str = "关闭";
return str;
}
/// <summary>
/// 打开串口
/// </summary>
/// <param name="portName"></param>
/// <param name="baud"></param>
/// <returns></returns>
public bool openComPort(string portName, string baud)
{
bool ret = false;
if(m_serialPort == null) return false;
try
{
m_serialPort.PortName = portName;
m_serialPort.BaudRate = Convert.ToInt32(baud);
m_serialPort.Open();
m_serialPort.DataReceived += new SerialDataReceivedEventHandler(port_ReceiveHandler);
ret = true;
}
catch(Exception er)
{
MessageBox.Show(er.Message);
}
return ret;
}
/// <summary>
/// 关闭串口
/// </summary>
/// <returns></returns>
public bool closeComPort()
{
if (m_serialPort == null) return false;
bool ret = false;
try
{
if(m_serialPort.IsOpen)
{
m_bClosing = true;
//处理Windows消息
while (m_bReceiving) Application.DoEvents();
m_serialPort.Close();
m_bClosing = false;
}
ret = true;
}
catch(Exception er)
{
}
return ret;
}
/// <summary>
/// 发送字符串
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public bool send(string str)
{
if (m_serialPort.IsOpen == false) return false;
m_serialPort.Write(str);
return true;
}
/// <summary>
/// 发送16进制数,发送函数重载
/// </summary>
/// <param name="byData"></param>
/// <param name="ofs">发送数据偏移量</param>
/// <param name="len">发送数据长度</param>
/// <returns></returns>
public bool send(byte[] byData, int ofs, int len)
{
if (m_serialPort.IsOpen == false) return false;
m_serialPort.Write(byData, ofs, len);
return true;
}
}
}
多谢[/quote]
哈,我没注意有新的消息过来,解决了就好
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Windows.Forms;
namespace vs_ComHelper
{
/// <summary>
/// SerialPort类的二次封装
/// </summary>
public class MyCom
{
public SerialPort m_serialPort;
/// <summary>
/// 正在关闭串口标志量
/// </summary>
public bool m_bClosing;
/// <summary>
///串口正在接收数据标志量
/// </summary>
public bool m_bReceiving;
/// <summary>
/// 定义接收委托类型
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
public delegate void delegate_ReceiveHandler(object sender, SerialDataReceivedEventArgs args);
/// <summary>
/// 定义接收委托变量
/// </summary>
private delegate_ReceiveHandler m_SerailReceiveHandler;
/// <summary>
/// 自定义串口类的构造函数
/// </summary>
/// <param name="port"></param>
public MyCom(SerialPort port, delegate_ReceiveHandler handler)
{
m_serialPort = port;
m_SerailReceiveHandler = handler;
m_bClosing = false;
m_bReceiving = false;
m_serialPort.Close();
}
/// <summary>
/// 串口接收处理函数
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
private void port_ReceiveHandler(object sender, SerialDataReceivedEventArgs args)
{
if(m_bClosing) return;
m_bReceiving = true;
m_SerailReceiveHandler(sender, args);
m_bReceiving = false;
}
/// <summary>
/// 判断串口是否打开
/// </summary>
/// <returns></returns>
public bool IsOpen()
{
return m_serialPort.IsOpen;
}
/// <summary>
/// 打开或者关闭串口
/// </summary>
/// <param name="com"></param>
/// <param name="baud"></param>
/// <returns></returns>
public string openOrClose(string com, string baud)
{
bool ret = false;
string str = string.Empty;
try
{
if (m_serialPort.IsOpen == false)
{
ret = openComPort(com, baud);
}
else
{
//serialPort1.Close();
//serialPort1.DiscardInBuffer();
ret = !closeComPort();
}
}
catch (Exception er)
{
MessageBox.Show(er.Message);
}
if (ret == false)
str = "打开";
else
str = "关闭";
return str;
}
/// <summary>
/// 打开串口
/// </summary>
/// <param name="portName"></param>
/// <param name="baud"></param>
/// <returns></returns>
public bool openComPort(string portName, string baud)
{
bool ret = false;
if(m_serialPort == null) return false;
try
{
m_serialPort.PortName = portName;
m_serialPort.BaudRate = Convert.ToInt32(baud);
m_serialPort.Open();
m_serialPort.DataReceived += new SerialDataReceivedEventHandler(port_ReceiveHandler);
ret = true;
}
catch(Exception er)
{
MessageBox.Show(er.Message);
}
return ret;
}
/// <summary>
/// 关闭串口
/// </summary>
/// <returns></returns>
public bool closeComPort()
{
if (m_serialPort == null) return false;
bool ret = false;
try
{
if(m_serialPort.IsOpen)
{
m_bClosing = true;
//处理Windows消息
while (m_bReceiving) Application.DoEvents();
m_serialPort.Close();
m_bClosing = false;
}
ret = true;
}
catch(Exception er)
{
}
return ret;
}
/// <summary>
/// 发送字符串
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public bool send(string str)
{
if (m_serialPort.IsOpen == false) return false;
m_serialPort.Write(str);
return true;
}
/// <summary>
/// 发送16进制数,发送函数重载
/// </summary>
/// <param name="byData"></param>
/// <param name="ofs">发送数据偏移量</param>
/// <param name="len">发送数据长度</param>
/// <returns></returns>
public bool send(byte[] byData, int ofs, int len)
{
if (m_serialPort.IsOpen == false) return false;
m_serialPort.Write(byData, ofs, len);
return true;
}
}
}
多谢