0

WinForm アプリケーションから Mifare 1k カードを読み取る際に、非常に奇妙な問題があります。私が使用しているリーダーは、PROMAG PCR-310U スマート カード リーダーです。このコードを使用してカードを読み取ります。

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 スマート カード リーダーと、GNetPlus および MifareReader dll です。親フォームが子フォームを作成するアプリケーションがあります。その子フォームは、スマート カードの ID を読み取り、それを親に送信します。問題はこれです-最初に子フォームを作成すると、読み取りプロセスは完全に機能しますが、2回目(およびその後は毎回)子を作成すると、リーダーは動作を停止します-CardIDとして「0」を返しますカードが存在するかどうか。このエラーの原因は何ですか?どうすれば修正できますか?

4

1 に答える 1

1

ほとんどの場合、問題は次のとおりです。

最初の子フォームを閉じた後、MifareReaderインスタンスは破棄されないか、そうでなければ不要になったことを認識します。つまり、それは引き続きリーダーを制御し、明らかにこれにより、そのリーダーにアクセスしようとする他のすべてのインスタンスへのアクセスがブロックされます。
このようなブロックされたインスタンスの 1 つは、開いた2 番目MifareReaderの子フォームのインスタンスです。

経由でポートを閉じて、最初のインスタンスに不要になったことを伝えてみてくださいPortOpen = false;

于 2013-05-29T08:32:17.633 に答える