从 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 是否卡是否存在。什么可能导致此错误,我将如何解决它?