ABNSAM.ABnoteSAMFinder.SAMFinder C# (CSharp) Method

SAMFinder() private static method

private static SAMFinder ( object args ) : void
args object
return void
        private static void SAMFinder(object args)
        {
            bool stopThread = false;
            string readerName = ((InfoHolder)args).readerName;
            ABnoteSAMFinder sam = ((InfoHolder)args).sam;
            SCARD_READERSTATE stat = Smart.GetStatusChangeEx(readerName, 10, SCardState.SCARD_STATE_UNAWARE);
            while (!stopThread)
            {
                if ((stat.dwEventState & SCardState.SCARD_STATE_UNKNOWN) == SCardState.SCARD_STATE_UNKNOWN)
                {
                    // reader removed?
                    return;
                }
                if (((stat.dwEventState & SCardState.SCARD_STATE_PRESENT) == SCardState.SCARD_STATE_PRESENT) &&
                    !((stat.dwEventState & SCardState.SCARD_STATE_INUSE) == SCardState.SCARD_STATE_INUSE))
                {
                    // Card inserted - check for SAM applet
                    ABnoteSAM card = new ABnoteSAM(Smart.Connect(readerName), new RelaxedStatusWordFilter());
                    string resp = "";
                    try
                    {
                        resp = card.SelectApplet();
                    }
                    catch (Exception) { }
                    if (resp.EndsWith("9000"))
                    {
                        sam.ReaderName = readerName;
                        sam.OnSAMFound(card);
                    }
                    else if (sam.FindAnyCard)
                    {
                        sam.ReaderName = readerName;
                        sam.OnSAMFound(card);
                    }
                }
                lock (stateLock)
                {
                    stopThread = sam.StopFinder;
                }
                try
                {
                    stat = Smart.GetStatusChangeEx((string)readerName, -1, stat.dwEventState);
                }
                catch (Exception) {
                    break;
                }
            }
        }