/// <summary> /// 从卡片中读卡扇区某些块中的数据,失败返回空 /// </summary> /// <param name="cardID">卡片的卡号(为null或空时不检查卡号是否一致)</param> /// <param name="section">扇区(0~15)</param> /// <param name="block">起始块号(0~3)</param> /// <param name="count">读取块数(1~3)</param> /// <param name="key">密钥</param> /// <param name="successBuz">成功是否发出提示音</param> /// <param name="failBuz">失败是否发出提示音</param> /// <param name="initKey">密钥验证失败后,是否初始化扇出密钥</param> /// <returns></returns> public ReadCardResult ReadSection(string cardID, int section, int block, byte count, byte[] key, bool successBuz, bool failBuz, bool initKey) { bool originalStarted = _Started; if (originalStarted) { StopReadCard(); //正在读卡,先停止 WaitForReading(); //等待读卡完成 } ReadCardResult result = null; try { if (HadActiveReader) { result = _ActiveReader.ReadSection(cardID, section, block, count, key, successBuz, failBuz, initKey); } else { foreach (ICardReader reader in _Readers) { result = reader.ReadSection(cardID, section, block, count, key, successBuz, failBuz, initKey); if (result != null && !string.IsNullOrEmpty(result.CardID)) { _ActiveReader = reader; break; } } if (result == null) { result = new ReadCardResult(); result.ResultCode = CardOperationResultCode.InitFail; } } } catch (ThreadAbortException ex) { } catch (Exception ex) { ExceptionPolicy.HandleException(ex); } if (originalStarted) { BeginReadCard(); //恢复读卡 } return(result); }