Tho*_*nes 26 .net c# serial-port
我正在编写一个Windows服务,用于与串行磁条读取器和中继板(访问控制系统)进行通信.
在另一个程序通过打开与我的服务相同的串行端口"中断"进程后,我遇到代码停止工作的问题(我得到IOExceptions).
部分代码如下:
public partial class Service : ServiceBase
{
Thread threadDoorOpener;
public Service()
{
threadDoorOpener = new Thread(DoorOpener);
}
public void DoorOpener()
{
while (true)
{
SerialPort serialPort = new SerialPort();
Thread.Sleep(1000);
string[] ports = SerialPort.GetPortNames();
serialPort.PortName = "COM1";
serialPort.BaudRate = 9600;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
serialPort.Parity = Parity.None;
if (serialPort.IsOpen) serialPort.Close();
serialPort.Open();
serialPort.DtrEnable = true;
Thread.Sleep(1000);
serialPort.Close();
}
}
public void DoStart()
{
threadDoorOpener.Start();
}
public void DoStop()
{
threadDoorOpener.Abort();
}
protected override void OnStart(string[] args)
{
DoStart();
}
protected override void OnStop()
{
DoStop();
}
}
Run Code Online (Sandbox Code Playgroud)
我的示例程序成功启动了工作线程,DTR的打开/关闭和升高使我的Mag-stripe读取器上电(等待1秒),关闭(等待1秒),依此类推.
如果我启动HyperTerminal并连接到同一个COM端口,HyperTerminal会告诉我该端口当前正在使用中.如果我在HyperTerminal中反复按ENTER键,尝试重新打开端口,它会在重试几次后成功.
这会导致我的工作线程中出现IOExceptions,这是预期的.但是,即使我关闭HyperTerminal,我仍然在我的工作线程中获得相同的IOException.唯一的办法是重启电脑.
其他程序(不使用.NET库进行端口访问)似乎在这一点上正常工作.
关于是什么导致这个的任何想法?