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

时间:2012-02-01 19:13:39

标签: c# serial-port

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

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

3 个答案:

答案 0 :(得分:2)

然后我会为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;
    }

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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