簡體   English   中英

事件處理程序觸發兩次

[英]Event handler fires twice

我是一名工程專業的學生,​​目前正在從事我的最后一年的項目。 我試圖在C#中建立一個基於RFID的停車場管理系統。 根據一些研究,我編寫了以下代碼從rfid閱讀器讀取數據,但是我正面臨這個問題。 事件處理程序
我用它兩次讀取接收到的數據時會觸發,這我不明白...我在互聯網上進行了一些研究,發現許多人都面臨着類似的事件處理程序觸發兩次的問題,但其中大多數都是單擊按鈕事件。 我只能在自定義事件處理程序上找到幾個線程,但是這些解決方案似乎在我的項目中不起作用。 這個問題有什么可能的解決辦法?

private void Parking_layout_Load(object sender, EventArgs e)
{
    foreach (string port in System.IO.Ports.SerialPort.GetPortNames())
    {
        comboBox1.Items.Add(port);
        if (comboBox1.Items.Count > 0)
            comboBox1.SelectedIndex = comboBox1.Items.Count - 1;
    }

    RFID = new SerialPort();
    RFID.PortName = comboBox1.Text;
    RFID.BaudRate = 9600;
    RFID.DataBits = 8;
    RFID.Parity = Parity.None;
    RFID.StopBits = StopBits.One;
    RFID.Open();
    RFID.DataReceived += new SerialDataReceivedEventHandler(RFID_DataReceived);

}

private void RFID_DataReceived(object sender, SerialDataReceivedEventArgs e)
{            
    try
    {                
        tag_id = RFID.ReadExisting().ToString();              
        SetLabel(tag_id);                
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
}

RFID_DataReceived執行兩次。 如果我放入messageBox.show()語句進行測試,它將顯示兩次消息。 我該如何解決這個問題?

在RFID_DataReceived方法上設置一個斷點,以查看為什么觸發兩次。 然后,您可以查看堆棧窗口以查看代碼的堆棧跟蹤。

您也可以對原始方法Parking_layout_Load進行相同的操作,以查看是否從另一段代碼中調用了它一次。 您也可以將代碼放入函數中,以將stacktrace寫入輸出窗口。

private void RFID_DataReceived(object sender, SerialDataReceivedEventArgs e)
{   Debug.WriteLine("StackTrace: '{0}'", Environment.StackTrace);         
    try
    {                
        tag_id = RFID.ReadExisting().ToString();              
        SetLabel(tag_id);                
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
}

有關更多詳細信息,請使用本示例中的stacktrace類: StackTrace類

Environment.StackTrace屬性

如何:使用“調用堆棧”窗口

什么是傳入數據? 查看您的代碼,我注意到您已經行

RFID.DataBits = 8;

在.NET中,一個char是2個字節。 如果您正在從設備讀取字符,那么實際上它需要調用事件處理程序兩次以處理所有16位。 您可以將值更改為16嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM