У меня действительно странная проблема с чтением карты Mifare 1k из приложения WinForm. Читатель, которого я использую, является устройством чтения смарт-карт PROMAG PCR-310U. Я использую этот код для чтения карты:Чтение Mifare 1k из приложения WinForm
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 и DLL GNetPlus и MifareReader. У меня есть приложение, где родительская форма создает дочернюю форму. Эта дочерняя форма считывает идентификатор смарт-карты и отправляет ее родителям. Проблема в том, что в первый раз, когда я создаю дочернюю форму, процесс чтения работает отлично, но во второй раз (и каждый раз после этого) я создаю ребенка, читатель перестает работать - он возвращает «0» в качестве идентификатора карты, независимо от того, карта присутствует или нет. Что может вызвать эту ошибку и как ее исправить?
Проблема, скорее всего, в том, что 'MifareReader' имеет проблемы с несколькими потоками. Но невозможно ответить без указания кода «MifareReader». –
К сожалению, этот класс является частью dll MifareReader, и у меня нет доступа к его метаданным только кода – NDraskovic
Является ли 'mfRequest' статическим методом? Или это 'MifareReader' экземпляр класса? –