gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:42 24 4
gpt4 key购买 nike

全部

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

串行设备类然后在它自己的新线程上创建一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com