事件干扰子程序

时间:2009-12-14 16:49:30

标签: vb.net events

我正在努力处理与我的通信课相关的事件。

每次通过串行连接接收新数据时,我都会通过事件处理程序调用'DataChange'函数。然后我继续将这些数据加载到DataGridView,为用户执行一些格式化等。由于调用DataChange事件的频率,我遇到了很多问题,并且似乎从中间过程的其他子程序和函数中窃取了焦点。

例如,我将尝试将数据传输回串行设备。在格式化数据之后,但在我实际上从库中调用Send函数之前,焦点将被引导回DataChange并且我从未实际传输过我的数据。

这是一个问题,通过线程化DataChange相关例程,在函数或例程之前解除DataHhange事件然后重新挂钩,或者是否存在一些我没有实现的基本原则来解决这个问题。

2 个答案:

答案 0 :(得分:1)

这听起来可能是线程同步问题。

事件本质上是线程化的,因此通过添加线程来解决它不是问题。

尝试使用SyncLock确保线程同步。

每当您收到数据时,请锁定一个对象,直到您使用完该数据为止。

SyncLock lockObject
    'Handle data changed...
End SyncLock

我认为这种情况的用语是竞争条件。

答案 1 :(得分:0)

让您的数据进入一个线程的缓冲区并从另一个线程中查看缓冲区。在主线程上将缓冲区标记为“准备发送”并使用辅助线程监视它。只需确保SyncLock对象。根据您的数据,您可以创建一个对象来包装它,只需使用布尔标志,然后将其转储到List(Of T)中。让您的监视器线程休眠50或任何毫秒,锁定缓冲区并检查标志,拉出所需内容,解锁列表并推出数据。