public OperationResult WaitForChanges(ref CardreaderStatus[] statuses) { var resourceManagerContext = EstablishContextIfNotEstablished(); var scardStatuses = new WinscardWrapper.SCARD_READERSTATE[statuses.Length]; for (var i = 0; i < statuses.Length; i++) scardStatuses[i] = statuses[i].ToScardStatus(); Logger.TraceEvent(TraceEventType.Verbose, 0, "SCardGetStatusChange started"); Logger.Flush(); var returnCode = WinscardWrapper.SCardGetStatusChange( resourceManagerContext, WinscardWrapper.INFINITE, scardStatuses, scardStatuses.Length); Logger.TraceEvent(TraceEventType.Verbose, 0, "SCardGetStatusChange ended"); Logger.Flush(); var operationResult = ReturnCodeManager.GetErrorMessage(returnCode); if (operationResult.IsSuccessful) { for (var i = 0; i < statuses.Length; i++) statuses[i].NewStatusFlags = scardStatuses[i].dwEventState; } return operationResult; }
private void RaiseCardreaderDisconnectedEvent(CardreaderStatus cardreaderStatus) { Logger.TraceEvent(TraceEventType.Verbose, 0, "Raising CardreaderDisconnected event"); Logger.Flush(); SendOrPostCallback cb = state => CardreaderDisconnected(null, new WatcherCardreaderEventArgs(cardreaderStatus.Name)); AsyncOperation.Post(cb, null); }