[英]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類
什么是傳入數據? 查看您的代碼,我注意到您已經行
RFID.DataBits = 8;
在.NET中,一個char是2個字節。 如果您正在從設備讀取字符,那么實際上它需要調用事件處理程序兩次以處理所有16位。 您可以將值更改為16嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.