- 假设有一个线程a,它是一个UI线程
- 线程A创建另一个线程B,该线程是非UI线程
- 当线程B想要在线程A中引发事件时,它所要做的就是if(Form1.InvokeRequired(Form1.Invoke(同一方法(并调用同一方法中的事件,对吗
很简单。但我的问题是,如果A和B都是非ui线程,你想做同样的事情怎么办?没有可从线程B调用Invoke((的表单对象。
如果WinForms应用程序做到了,为什么没有像这样的非UI线程机制?我是不是错过了什么?是否有类似的方法在一个非ui线程中从另一个非ui线程引发事件?
提前谢谢。
附言:生产者/消费者模型答案不是我在这里寻找的答案。
在第一种情况下,由于线程B知道它不是UI线程,所以它还不如调用.Invoke(...)
。
当有两个非UI线程时,您将不得不使用某种消息传递/队列。你不能只是中断线程A来运行工作;您必须对线程A进行编码,以(例如(检查队列中的工作,将项目出列并执行它。这与winforms的功能非常相似,这得益于windows消息循环。如果它不是你想要的答案,那也没关系——它就是它。
如果没有UI,就不存在跨线程的问题。所以只需从线程中调用它们。不过,您可能需要一些同步机制。