当前位置:  开发笔记 > 编程语言 > 正文

如何使用.NET/C#进行强大的SerialPort编程?

如何解决《如何使用.NET/C#进行强大的SerialPort编程?》经验,为你挑选了1个好方法。

我正在编写一个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();
    }
}

我的示例程序成功启动了工作线程,DTR的打开/关闭和升高使我的Mag-stripe读取器上电(等待1秒),关闭(等待1秒),依此类推.

如果我启动HyperTerminal并连接到同一个COM端口,HyperTerminal会告诉我该端口当前正在使用中.如果我在HyperTerminal中反复按ENTER键,尝试重新打开端口,它会在重试几次后成功.

这会导致我的工作线程中出现IOExceptions,这是预期的.但是,即使我关闭HyperTerminal,我仍然在我的工作线程中获得相同的IOException.唯一的办法是重启电脑.

其他程序(不使用.NET库进行端口访问)似乎在这一点上正常工作.

关于是什么导致这个的任何想法?



1> Zach Saw..:

@thomask

是的,Hyperterminal确实在SetCommState的DCB中启用了fAbortOnError,这解释了SerialPort对象抛出的大多数IOExceptions.有些PC /手持设备也有UART,默认情况下会打开错误标志中止 - 所以串口的init例程必须清除它(微软忽略了这一点).我最近写了一篇长篇文章来更详细地解释这个问题(如果你有兴趣,请看这个).


这是代码.http://zachsaw.blogspot.com/2010/07/serialport-ioexception-workaround-in-c.html
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有