我有一个WPF程序,其中我正在从串行端口读取大量数据,目前我正在使用for循环读取数据,一次读取数据包并将其写入文件。我想将此事件作为事件处理操作,以便在此过程中继续更新UI。
我认为最好为此目的使用SerialPort.DataReceived
事件,但是我需要能够在完成任务时从SerialPort
对象中删除此处理程序。我打电话给Close()
时这样做了吗?或者我是否需要通过其他方式删除处理程序?
答案 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)
我会离开处理程序,而是在处理程序逻辑中测试何时需要它。