C# 事件在错误的线程上触发

标签 c# multithreading .net-2.0 serial-port

全部

我有一个允许用户与多个串行设备通信的应用程序。 管理器类用于启动应用程序,它为每个串行设备创建一个新线程。在此线程内,创建串行设备,并将线程和串行设备对象存储在管理器类中,以供以后需要时使用。

串行设备类然后在它自己的新线程上创建一个 com 端口类,用于连接到 com 端口并发送/接收数据。当接收到数据时,串行设备类会触发一个事件,而串行设备类又会向管理器类触发一个事件,而管理器类又会向 UI 触发一个事件,以提醒用户新数据已到达。

我的问题是,当 com 端口类触发它的事件通知串行端口类时,串行端口类接收事件并继续在 com 端口线程下处理。同样,如果用户向下发送任何信息到 com 端口,它都会在 UI 线程下运行。

我稍后会添加代码作为编辑,但就目前而言,如果有人能发现任何明显的东西,我将非常感激。

我曾尝试在串行设备类中接收事件,然后调用一个方法来查看是否使它在正确的线程下运行,但这并不好。

我知道串行设备线程正在运行,就像我执行应用程序一样。在创建它的 com 端口类后在类中运行。

我没有使用任何后台工作程序,因为这些线程在应用程序的生命周期内一直存在,而且我知道后台工作程序旨在用于短期运行的计算。

非常感谢

编辑:

忘了说,这是 .NET 2.0 中的 Winforms 应用程序,因此没有 Dispatcher 可用

编辑: 好的,看起来信息正在 DataReceived 线程内部传递(我认为它也不是 com 端口线程)。 我还尝试将 BackgroundWorker 用于串行设备类,但这也没有任何区别。 帮忙?

最佳答案

.NET 2.0 有 SynchronizationContext。这有点麻烦(您必须将上下文从 UI 线程传递给其他线程),但它应该可以解决问题。

更多信息在这里:http://msdn.microsoft.com/en-us/magazine/gg598924.aspx

关于C# 事件在错误的线程上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5096301/

相关文章:

c# - linq-to-sql .All() 或 .Any() 查找匹配条件的所有项目

c# - 如何在 Windows Phone 8 中异步 append 文件

c - 同步线程 - C

c# - 在 .NET 4 下运行的 .NET 2 和 .NET 4 程序集之间有什么区别

c# - 如何制作脚本/程序以使应用程序始终运行?

c# - WinForms 的免费或开源图表组件

c# - 异步线程体循环,它只是工作,但如何?

c++ - pthreads 程序工作了一段时间然后停止

c# - 什么是 xElement.Parse(字符串)的 .Net 2.0 等价物

.net - Visual Studio 2012 .NET Framework 2.0 缺失