在C#中将来自两个事件的数据协调到UI线程

时间:2011-01-10 17:44:10

标签: c# wpf multithreading serial-port

我正在编写C#WPF代码来窥探串口(调试工具)。我正在创建两个虚拟端口连接为null调制解调器与com0com(app)并使用我的代码读取一个端口并立即发送出另一个端口,反之亦然:

HOST <--> Virtual COM <--> C# spy app <--> Real COM <--> TARGET

为此,我创建了一个类来管理创建DataReceived事件的SerialPort对象。在这个实现中,我将有两个这个类的实例,一个用于管理HOST通信,另一个用于目标。 UI只会解析和显示这两个类的数据。

问题:串口在不同于UI的线程上运行......我有两个尝试更新同一个UI。

我的方法是创建一个公共List<T>,其中T可以是struct { byte[] data; Direction direction},每个事件处理程序将附加其数据,而UI可以解析此数据。事件处理程序将执行List.Add(),而UI将在数据存在时执行List.RemoveAt(0)。数据速率:19200bps(每0.5ms 1个字节)。

问题: 来自两个不同串行端口的事件处理程序是否会相互中断并损坏List数据? 使用List对象会影响性能吗?我应该尝试使用一组struct而只是跟踪索引吗?

或者我应该做一些完全不同的事情?

1 个答案:

答案 0 :(得分:3)

  

来自两个不同串口的事件处理程序是否会相互中断并损坏列表数据?

当然,在线程池线程上引发DataReceived事件。你有一个三环马戏团在这里,两个线程可以同时接收一些东西,一个UI线程同时读取接收到的数据。需要锁定以保护列表&lt;&gt;。