从WinForm应用程序中读取Mifare 1k

从WinForm应用程序中读取Mifare 1k卡时,我有一个非常奇怪的问题。 我正在使用的读卡器是PROMAG PCR-310U智能卡读卡器。 我用这段代码来读卡片:

MifareReader.CommPort = 4; MifareReader.PortOpen = true; MifareReader.mfRequest(); MessageBox.Show(MifareReader.mfAnticollision().ToString()); MifareReader.mfHalt(); 

代码放在backgroundWorkers DoWork方法中,整个方法如下所示:

  private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; while (!worker.CancellationPending) { MifareReader.CommPort = 4; MifareReader.PortOpen = true; MifareReader.mfRequest(); CardID = MifareReader.mfAnticollision().ToString(); MifareReader.mfHalt(); if (CardID != "0" && CardID != string.Empty) { e.Result = CardID; worker.CancelAsync(); break; } } } 

我正在使用的读卡器是PROMAG PCR-310U智能卡读卡器和GNetPlus和MifareReader dll。 我有一个父表单创建子表单的应用程序。 该子表单读取智能卡的ID并将其发送给父级。 问题是这个 – 我第一次创建子窗体时,读取过程完美地工作但是第二次(以及之后的每次)我创建了孩子,读者停止工作 – 它返回“0”作为CardID是否卡是否存在。 什么可能导致此错误,我将如何解决它?

最有可能的问题是:

关闭第一个子窗体后, MifareReader实例不会被处理,或者知道不再需要它。 这意味着它仍然控制着阅读器,显然这会阻止访问试图访问该阅读器的所有其他实例。
一个这样的被阻止的实例是您打开的第二个子窗体中的MifareReader实例。

尝试告诉第一个实例,通过PortOpen = false;关闭端口不再需要它PortOpen = false;