我对多线程有点熟悉,因为我已经阅读过它,但从未在实践中使用它。C#多线程 - 无控制调用
我有一个项目使用第三方库,通过引发事件来共享输入设备的状态。问题是,写入库的方式是从不同的线程引发这些事件。
我的应用程序不需要是多线程的,我遇到了很多经典的线程问题(UI控件抱怨与不同的线程进行交互,因为一段代码被迭代而被修改的集合在它上面等)。
我只想让第三方库的事件回馈给我的UI线程。具体而言,我认为应该发生的事情是:
我的类接收事件并且处理程序正在与UI不同的线程上运行。我想检测这种情况(如使用InvokeRequired),然后执行相当于BeginInvoke的控制权返回给UI线程。然后可以在类层次结构上发送适当的通知,并且只有一个线程才能触及我的所有数据。
问题是,接收这些输入事件的类不是从Control派生的,因此没有InvokeRequired或BeginInvoke。原因是我试图干净地分离UI和底层逻辑。该类仍然在UI线程上运行,它只是在类本身内没有任何UI。
现在我通过破坏这个分离来解决这个问题。我传递了一个控件的引用,该控件将显示来自我的课程的数据,并使用其调用方法。这似乎违背了分离它们的全部目的,因为现在底层类直接依赖于我的特定UI类。
也许有一种方法可以保存对运行构造函数的线程的引用,然后在执行调用命令的线程命名空间中有一些东西?
有没有办法解决这个问题?我的方法完全错误吗?
花了我一段时间了解代表如何使用,但它的工作原理! – colithium