private void ReleaseContext()
        {
            int retCode = ModWinsCard.SCardCancel(_context);

            //if (retCode != ModWinsCard.SCARD_S_SUCCESS)
            //    Console.WriteLine("Cancel failed");

            retCode = ModWinsCard.SCardReleaseContext(_context);
            //if (retCode != ModWinsCard.SCARD_S_SUCCESS)
            //    Console.WriteLine("Release failed");
        }
        public void DisConnect()
        {
            this._state = CardState.IsDisable;
            int retCode = ModWinsCard.SCardCancel(_context);

            if (retCode != ModWinsCard.SCARD_S_SUCCESS)
            {
                Console.WriteLine(string.Format("{0} cancel failed", this._info.SerialNumber));
            }
            retCode = ModWinsCard.SCardReleaseContext(_context);
            if (retCode != ModWinsCard.SCARD_S_SUCCESS)
            {
                Console.WriteLine(string.Format("{0} release failed", this._info.SerialNumber));
            }
        }
 public bool Connect()
 {
     try
     {
         if (_canRead)
         {
             this._state = CardState.IsReady;
             _task       = Task.Factory.StartNew(() => ReadingThread(), TaskCreationOptions.LongRunning);
             return(true);
         }
         else
         {
             GetReady();
             Thread.Sleep(1000);
             if (_canRead)
             {
                 this._state = CardState.IsReady;
                 _task       = Task.Factory.StartNew(() => ReadingThread(), TaskCreationOptions.LongRunning);
             }
             return(true);
         }
     }
     catch
     {
         this._state = CardState.IsDisable;
         int retCode = ModWinsCard.SCardCancel(_context);
         if (retCode != ModWinsCard.SCARD_S_SUCCESS)
         {
             Console.WriteLine(string.Format("{0} cancel failed", this._info.SerialNumber));
         }
         retCode = ModWinsCard.SCardReleaseContext(_context);
         if (retCode != ModWinsCard.SCARD_S_SUCCESS)
         {
             Console.WriteLine(string.Format("{0} release failed", this._info.SerialNumber));
         }
         return(false);
     }
 }