首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事件处理程序触发两次

事件处理程序触发两次
EN

Stack Overflow用户
提问于 2014-12-23 02:10:39
回答 2查看 1.1K关注 0票数 2

我是一名工科学生,目前正在做我最后一年的项目。我正在尝试在C#中建立一个基于射频识别的停车场管理系统。基于一些研究,我写了下面的代码来从rfid读取器读取数据,但我面临着这个问题。事件处理程序

我用它来读取接收到的数据触发两次,我不明白……我在互联网上做了一些研究,发现许多人都面临着事件处理程序触发两次的类似问题,但大多数都是按钮单击事件。我只能在自定义事件处理程序上找到几个线程,但这些解决方案似乎在我的项目中不起作用。这个问题有什么可能的解决方案吗?

代码语言:javascript
复制
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()语句来测试它,它会显示两次消息。如何解决此问题?

EN

回答 2

Stack Overflow用户

发布于 2014-12-23 02:36:45

在RFID_DataReceived方法上设置一个断点,以查看它触发两次的原因。然后,您可以查看堆栈窗口以查看代码的堆栈跟踪。

您还可以对原始方法Parking_layout_Load执行相同的操作,以查看它是否从另一段代码中被多次调用。还可以将代码放在函数内部,以便将堆栈跟踪写入“输出”窗口。

代码语言:javascript
复制
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 Class

Environment.StackTrace Property

How to: Use the Call Stack Window

票数 1
EN

Stack Overflow用户

发布于 2014-12-23 02:18:33

传入的数据是什么?看一下你的代码,我注意到你有一行

RFID.DataBits = 8;

在.NET中,一个字符是2个字节。如果你正在从你的设备读取一个字符,那么它实际上需要调用你的事件处理程序两次来处理所有的16位。您可以将该值更改为16吗?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27608156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档