有没有人知道一个好的(希望是免费的)类来代替 .net SerialPort 类?它给我带来了问题,我需要一个稍微灵活一点的。
请参阅有关我的问题的其他线程,但基本上我需要在打开端口时禁止发出 IOCTL_SERIAL_SET_DTR 和 IOCTL_SERIAL_CLR_DTR 命令,因此我需要比 .net 框架提供的类更灵活的东西。
有没有人知道一个好的(希望是免费的)类来代替 .net SerialPort 类?它给我带来了问题,我需要一个稍微灵活一点的。
请参阅有关我的问题的其他线程,但基本上我需要在打开端口时禁止发出 IOCTL_SERIAL_SET_DTR 和 IOCTL_SERIAL_CLR_DTR 命令,因此我需要比 .net 框架提供的类更灵活的东西。
几年前,在将串行支持添加到 .net之前,我使用了OpenNETCF.IO.Serial 。它适用于紧凑型框架,但我将它用于紧凑型设备和常规 Windows 应用程序。你得到源代码,这样你就可以自己修改它,这就是我所做的。
它基本上围绕从 kernel32.dll 导入的串行函数创建 ac# 包装器。
您可能还想看看如何捕获由于 USB 电缆被拔出而消失的串行端口
这是我用来调用它的代码
using OpenNETCF.IO.Serial;
public static Port port;
private DetailedPortSettings portSettings;
private Mutex UpdateBusy = new Mutex();
// create the port
try
{
// create the port settings
portSettings = new HandshakeNone();
portSettings.BasicSettings.BaudRate=BaudRates.CBR_9600;
// create a default port on COM3 with no handshaking
port = new Port("COM3:", portSettings);
// define an event handler
port.DataReceived +=new Port.CommEvent(port_DataReceived);
port.RThreshold = 1;
port.InputLen = 0;
port.SThreshold = 1;
try
{
port.Open();
}
catch
{
port.Close();
}
}
catch
{
port.Close();
}
private void port_DataReceived()
{
// since RThreshold = 1, we get an event for every character
byte[] inputData = port.Input;
// do something with the data
// note that this is called from a read thread so you should
// protect any data pass from here to the main thread using mutex
// don't forget the use the mutex in the main thread as well
UpdateBusy.WaitOne();
// copy data to another data structure
UpdateBusy.ReleaseMutex();
}
private void port_SendBuff()
{
byte[] outputData = new byte[esize];
crc=0xffff;
j=0;
outputData[j++]=FS;
// .. more code to fill up buff
outputData[j++]=FS;
// number of chars sent is determined by size of outputData
port.Output = outputData;
}
// code to close port
if (port.IsOpen)
{
port.Close();
}
port.Dispose();
我没有尝试过,但也许你可以:
System.IO.Ports.SerialPort
使用Reflector或类似工具获取源代码标准的 .NET SerialPort 不是一个密封的类——你有没有机会从一个子类中获得你需要的行为?