【发布时间】:2016-12-25 10:00:53
【问题描述】:
我正在寻找一种以 SendMessage 允许的方式执行跨线程操作的方法。换句话说,如何让一个线程在另一个线程中执行某些功能。但我想在没有 SendMessage 的情况下这样做,因为这需要一个并不总是可用的窗口。
同步或异步都可以。
.NET 使用 System.Windows.Threading.Dispatcher 类来实现,所以肯定有办法吗?
【问题讨论】:
-
您需要一个工作队列,目标线程在处理其项目时被卡住,这正是 .NET 中
Dispatcher类提供的。 -
我需要使用哪些功能?我正在查看“线程池 API”文档,但它似乎只能在特殊工作线程上排队操作。如果工作线程需要在主 UI 线程上排队执行操作怎么办?
-
对于不习惯原生 Windows 开发的人来说,这似乎很奇怪,但是有一个不可见的窗口是非常普遍的。在许多情况下,即使线程从不显示单个用户可见元素,它也需要一个线程,这是完全可以接受的。因此,如果您必须交换或收听消息,只需创建一个窗口即可。虽然解释您的实际问题可能是一个好主意 - 您很少需要在特定线程上执行某些操作。
-
如果你有一个UI线程使用SendMessage,只需创建一个仅消息窗口并用于跨线程业务。
-
@MatteoItalia 好的,你从哪里得知我想劫持另一个线程?我问的正是这些函数的作用,我不知道 QueueUserAPC 似乎是最好的选择。问题解决了。
标签: c++ multithreading sendmessage