简单。但我的问题是,如果你想要做同样的事情,如果A和B都是非ui线程?没有形成对象来从线程B调用Invoke()。
如果WinForms应用程序这样做,为什么没有像非UI线程那样的机制?我错过了什么吗?是否有类似的方法从另一个非ui线程在一个非ui线程中引发事件?
提前致谢。
P.S。生产者/消费者模型的答案不是我在这里寻找的。
答案 0 :(得分:1)
在第一个场景中,由于线程B 知道它不是UI线程,所以也可以只调用.Invoke(...)
。
当有两个非UI线程时,您将不得不使用某种消息传递/队列。你不能只是中断线程A来运行工作;您必须将线程A编码为(例如)检查队列是否正常工作,使项目出列并执行它。这就是winforms所做的,由Windows消息循环提供。如果它不是您正在寻找的答案并不重要 - 它就是它。
答案 1 :(得分:1)
如果没有用户界面,则不存在交叉线程问题。所以只需从线程中调用它们即可。您可能需要一些同步机制。