public Reader() { int result = 0; result = WinSCard.SCardEstablishContext(WinSCard.Scope.SCARD_SCOCPE_SYSTEM, IntPtr.Zero, IntPtr.Zero, out context); if (result != WinSCard.SCARD_S_SUCCESS) { Debug.WriteLine(WinSCard.SCardErrorMessage(result)); } byte[] readers = null; uint readerCount = 0; result = WinSCard.SCardListReaders(context, null, readers, ref readerCount); readers = new byte[readerCount]; result = WinSCard.SCardListReaders(context, null, readers, ref readerCount); availableReaders = new MultiString(readers); if (result != WinSCard.SCARD_S_SUCCESS) { Debug.WriteLine(WinSCard.SCardErrorMessage(result)); } //Start a background worker thread which monitors available card readers. if ((availableReaders.Count > 0)) { readerStates = new WinSCard.SCARD_READERSTATE[availableReaders.Count]; for (int i = 0; i < readerStates.Length; i++) { readerStates[i].szReader = availableReaders.ToArray()[i]; } monitorThread = new BackgroundWorker(); monitorThread.WorkerSupportsCancellation = true; monitorThread.DoWork += WaitChangeStatus; monitorThread.RunWorkerAsync(); } }
public SmartCardException(int result) : base(WinSCard.SCardErrorMessage(result)) { Result = result; }