从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是否卡是否存在。什么可能导致此错误,我将如何解决它?
答案 0 :(得分:1)
最有可能的问题是:
关闭第一个子表单后,MifareReader
实例未被处理或以其他方式知道不再需要它。这意味着它仍然控制着阅读器,显然这会阻止访问试图访问该阅读器的所有其他实例
一个这样的被阻止的实例是您打开的 second 子窗体中的MifareReader
实例。
尝试通过PortOpen = false;
关闭端口告诉第一个实例不再需要它。