如何在两个NON-UI线程中模拟Control.Invoke()


  1. 假设有一个线程a,它是一个UI线程
  2. 线程A创建另一个线程B,该线程是非UI线程
  3. 当线程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,就不存在跨线程的问题。所以只需从线程中调用它们。不过,您可能需要一些同步机制。

相关内容

  • 没有找到相关文章

最新更新