求助:在做抽象类委托事件时候传值
凌風 2020-02-27 03:57:41 这个是身份证读卡器的抽象类,在读到数据后读卡结束事件怎么把数据传到程序中
/// <summary>
/// 定义delegate对象
/// </summary>
/// <param name="sender">事件发送者,为 IDCardReader 对象</param>
/// <param name="e">事件参数</param>
public delegate void ReadCardCompleted(object sender, ReadCardCompletedEventArgs e);
/// <summary>
/// 读卡结束事件
/// </summary>
public event ReadCardCompleted OnReadCardCompleted;
/// <summary>
/// 停止读卡
/// </summary>
public void Stop()
{
shouldStop = true;
if (ExternalSyncEvent != null) ExternalSyncEvent.Set();
}
/// <summary>
/// 线程池回调方法
/// </summary>
/// <param name="state">回调方法要使用的信息对象</param>
private void CardReaderCallback(Object state)
{
InnerIsAlive = true;
try
{
// 读取身份证
while (true)
{
if (shouldStop) break;
// 等待外部同步信号
if (ExternalSyncEvent != null)
{
ExternalSyncEvent.WaitOne();
if (shouldStop) break;
}
// 验证卡
if (Authenticate() >= 0)
{ // 读基本信息
///不正常
if (ReadContent() >= 0)
{ // 存储身份证信息
ReadCardCompletedEventArgs Args = new ReadCardCompletedEventArgs();
if (File.Exists(CHMsgFileName))
{ // 文字信息
using (StreamReader sr = new StreamReader(CHMsgFileName, Encoding.Unicode, true))
{ // 提取数据
Retrieve(sr.ReadToEnd(), Args);
}
}
// 照片信息
if (((IDCardBiometrics)state & IDCardBiometrics.Photo) == IDCardBiometrics.Photo)
{
if (File.Exists(PhotoFileName))
{
using (FileStream fs = new FileStream(PhotoFileName, FileMode.Open, FileAccess.Read))
{
Args.Photo = new byte[fs.Length];
fs.Read(Args.Photo, 0, (int)fs.Length);
}
}
}
// 关闭读卡操作,等待下次信号
if (ExternalSyncEvent != null)
{
ExternalSyncEvent.Reset();
if (shouldStop) break;
}
// 处理读卡结束事件
if (OnReadCardCompleted == null)
{
OnReadCardCompleted(this, Args);
}
}
}
} // End While
}
catch (Exception exception)
{
// 阻止异常抛出
}
finally
{
InnerIsAlive = true;
}
}