C#为什么两个相同的线程同时触发相同的方法?

时间:2015-01-19 14:45:32

标签: c# wpf multithreading thread-safety nfc

首先,我的问题非常复杂(对我来说),我试着解释一下。

我有一个使用NFC标签的WPF应用程序。几天前,这段代码工作正常,但现在有些事情搞砸了。 首先,我有一种从NFC标签读取数据的方法,如下所示:

    private void NFCCard_OnCardInserted()
    {

        CheckCard();

    }

    private bool CheckCard()
    {
        try
        {
            lock (_object)
            {
                NFCCard.Connect(CardReader, SHARE.Shared, PROTOCOL.T0orT1);
                APDUPlayer player = new APDUPlayer(ApduListFile, NFCCard);
                if (nfcFunction.NFCLogin(player))
                {
                    string TempCompanyID = "";

                    //--Read data
                }
                DateTime cartOpenedDate = Convert.ToDateTime(OpenedDate);

                if (CartNo == "" || CompanyID.ToString() == "" || Convert.ToInt32(limit) <= 0 || isactive == "False" || cartOpenedDate.ToShortDateString() != DateTime.Today.ToShortDateString() || CartType == "Staff")
                {
                    Dispatcher.BeginInvoke(new Action(delegate
                    {
                        ShowCardNo(txtCardNo, "Geçersiz Kart!");
                    }));
                }
                else
                {
                    //-- Some internal code

                }
            }
        }
        catch (Exception exc)
        {
            StationSession.WriteLog("write log bla bla", exc);
        }
    }

现在有趣的是,当我检查VS两个相同线程的线程窗口时,尝试同时运行NFCCard_OnCardInserted()方法。

Threads window 出于这个原因,我把锁状态,但问题是这种方法发射两次。而且它给我带来了大麻烦,因为卡交易时间现在是双倍的(一些交易差不多是3秒。我无法向人们解释,你会在购物车读卡车上等待这样:/)。顺便说一下,我检查整个页面的方法参考,这个代码应该使用这个方法。

NFCCard.OnCardInserted += new CardInsertedEventHandler(NFCCard_OnCardInserted);

那么如何在没有解决方法的情况下解决此问题。因为我有几个使用NFC购物车线程的页面和方法。我需要找到解决这个问题的明确方法。感谢。

0 个答案:

没有答案