gpt4 book ai didi

C# 在添加的线程中触发事件

转载 作者:太空狗 更新时间:2023-10-29 18:25:10 25 4
gpt4 key购买 nike

考虑两个类; ProducerConsumer(与经典模式相同,每个都有自己的线程)。 Producer 是否有可能有一个 Event 可以注册到 Consumer 并且当生产者触发事件时,消费者的事件处理程序运行在它自己的线程?这是我的假设:

  • Consumer不知道Producer的事件是否被触发在他自己的线程或其他线程中。

  • ProducerConsumer 都不是 Control 的后代,所以它们没有BeginInvoke 方法继承。

附言。我没有尝试实现 Producer - Consumer 模式。这是两个简单的类,我正在尝试重构生产者,以便它包含线程。

[更新]

为了进一步扩展我的问题,我试图以尽可能最简单的方式包装要使用的硬件驱动程序。例如,我的包装器将有一个 StateChanged 事件,主应用程序将注册到该事件,以便在硬件断开连接时收到通知。由于实际的驱动程序除了轮询检查它的存在之外别无他法,所以我需要启动一个线程来定期检查它。一旦它不再可用,我将触发需要在添加时在同一线程中执行的事件。我知道这是一种经典的生产者-消费者模式,但由于我正在尝试使用我的驱动程序包装器进行简化,所以我不希望用户代码实现消费者。

[更新]

由于一些评论表明这个问题没有解决方案,我想添加几行可能会改变他们的想法。考虑到 BeginInvoke 可以做我想做的事,所以这应该不是不可能的(至少在理论上)。实现我自己的 BeginInvoke 并在 Producer 中调用它是查看它的一种方式。只是不知道BeginInvoke是怎么做到的!

最佳答案

您想进行线程间通信。是的,有可能。使用 System.Windows.Threading.Dispatcher http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.aspx

Dispatcher 维护特定线程的优先工作项队列。当在线程上创建 Dispatcher 时,它成为唯一可以与线程关联的 Dispatcher,即使 Dispatcher 已关闭。如果您尝试获取当前线程的 CurrentDispatcher 并且 Dispatcher 未与该线程相关联,则会创建一个 Dispatcher。当您创建 DispatcherObject 时,也会创建一个 Dispatcher。如果您在后台线程上创建 Dispatcher,请务必在退出线程之前关闭 Dispatcher。

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

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