繁体   English   中英

SerialPort.Close()和事件处理程序

[英]SerialPort.Close() and Event Handlers

我有一个WPF程序,其中我从串行端口读取大量数据,目前我正在循环读取数据中的一个数据包,并将其写入文件。 我想将此事件作为事件处理操作,以便在此过程中继续更新UI。

我认为最好为此目的使用SerialPort.DataReceived事件,但是我需要能够在完成任务时从我的SerialPort对象中删除此处理程序。 这是在我调用Close()吗? 或者我需要通过其他方式删除处理程序?

我会为SerialPort写一个warper然后。 并让包装器跟踪处理程序并在关闭时将其删除。 (因此,您不必在所有使用实例中实现此逻辑。)使用 - =方法。

每个实例都需要有自己的事件来存储调用。 (不要解雇他们)

例如:

    private event EventHandler myHandle;
    public event EventHandler myExposedHandle
    {
        add
        {
            myHandle += value;
            serialPort.DataReceived += value;
        }
        remove
        {
            myHandle -= value;
            serialPort.DataReceived -= value;
        }
    }
    public void removeFunction()
    {
        myHandle = null;
        serialPort.DataReceived -= myHandle;
    }

如果您正在重用相同的SerialPort对象,只需将事件设置为null即可删除处理程序。 只要没有堆叠的处理程序,这应该可以正常工作; 否则,它变得有点复杂。

我会离开处理程序,而是在处理程序逻辑中测试何时需要它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM