c# 串口通信,打开串口报错:不支持请求

解决方案 »

  1.   

    public event EventHandler<CardEventArgs> VipCardSlide;        private string _cardCache;
            private bool _enableReadCard;
            private readonly System.Timers.Timer _tmrVerifyCard;  
            readonly System.IO.Ports.SerialPort _serialCardReader;
           
            private readonly string _cardReaderPortName;
            public SerialCardReader()
            {
                //读卡参数
                _cardCache = string.Empty;
                _enableReadCard = true;            _tmrVerifyCard = new System.Timers.Timer();            _tmrVerifyCard.Elapsed += TmrVerifyCardElapsed;            _tmrVerifyCard.Interval = 1500;            _tmrVerifyCard.Enabled = false;            _cardReaderPortName ="COM3";
                _serialCardReader = new System.IO.Ports.SerialPort();
                _serialCardReader.DataReceived += SerialCardReaderDataReceived;
            }        public bool Open()
            {
                try
                {
                    InitCardReaderPort();
                    return true;
                }
                catch
                {
                    return false;
                }
            }        public bool Reset()
            {
                try
                {
                    return CloseCardReaderPort();
                }
                catch
                {
                    return false;
                }
            }        public bool Close()
            {
                try
                {
                    CloseCardReaderPort();
                    return true;
                }
                catch
                {
                    return false;
                }        }        //启动一个延时事件 
            //定时检查,异步
            private void TmrVerifyCardElapsed(object source, ElapsedEventArgs e)
            {
                _tmrVerifyCard.Enabled = false;            _enableReadCard = false;
                //string CardNumber = ReadCard.GetCardNumberFromCardCache(CardCache);
                //showInfo(CardCache);
                //TxtLogExecute.AddTxtLog(CardCache);            int splitor = _cardCache.IndexOf("=");
                if (splitor > -1)
                {
                    string originalCache = _cardCache;
                    _cardCache = _cardCache.Substring(0, splitor);
                    string remainCache = originalCache.Substring(splitor + 1);                if(_cardCache.StartsWith("0"))                 {
                        splitor = remainCache.IndexOf("=");
                        if (splitor > -1)//
                            _cardCache = remainCache.Substring(0, splitor);
                        else                        _cardCache = _cardCache.Substring(9, 18);
                    }
                }
                _cardCache = _cardCache.Trim('?');            if (_cardCache.Trim().Length > 0)
                {
                    var handler = this.VipCardSlide;
                    if (handler != null)
                    {
                        //GoProgress();
                        //ShowTouchScreenEx("01");
                        //GoPageCall("01", "");
                        var ee = new CardEventArgs(NumberGenerationType.BankCard, _cardCache);
                        handler(this, ee);
                    }
                }            _cardCache = string.Empty;
            }        #region 串口操作
            //初始化串口
            private bool InitCardReaderPort()
            {
                _serialCardReader.PortName = _cardReaderPortName;
                _serialCardReader.BaudRate =2400;
                _serialCardReader.Parity = System.IO.Ports.Parity.None;
                _serialCardReader.StopBits = System.IO.Ports.StopBits.One;
                _serialCardReader.Handshake = System.IO.Ports.Handshake.RequestToSend;
                _serialCardReader.DataBits = 8;
              
              //  _serialCardReader.ReadTimeout = 1000;
              //  _serialCardReader.WriteBufferSize = 2048;
                try
                {
                    if (_serialCardReader.IsOpen)
                    {
                        _serialCardReader.Close();
                        _serialCardReader.Open();
                    }
                    else
                    {
                        _serialCardReader.Open();
                    }
                    return true;
                }
                catch
                {
                    return false;
                }
            }