【问题标题】:Waiting for messages in Managed Code等待托管代码中的消息
【发布时间】:2009-01-09 05:31:56
【问题描述】:

这与earlier question密切相关。

在托管世界中:

  • 如何检查当前线程是否 消息队列中有消息吗?
  • 如何屈服于操作系统并等待 当前线程中的消息 (如 GetMessage 或 WaitMessage)?

我正在寻找没有 PInvoke 的托管等效项。

【问题讨论】:

    标签: windows winforms winapi message-queue


    【解决方案1】:

    您可以覆盖 WndProc,然后在它被调用时触发您自己的事件。当然,这不会阻塞。如果您想阻塞直到收到消息,您可以在另一个线程中使用一个方法等待同步对象,并让 WndProc 向该对象发出信号。

    【讨论】:

    • 这看起来是最好的选择,我完全错过了你想要抽出消息队列的问题;-)
    • 你会覆盖哪个 WndProc?每个控件都有自己的。
    【解决方案2】:

    您可以使用AddMessageFilter function.

    我不认为在没有 P/Invoke 的情况下如何做到这一点的阻塞方式,因为它超出了 .NET 的意图。

    【讨论】:

    • 为什么等待消息会违反 .NET 的设计原则?只是好奇。它在哪些方面有害?
    • 不完全违反,你仍然可以这样做,这就是为什么有像 P/Invoke 这样的东西。也许我应该写 Windows 窗体,但重点没有改变。
    • 只是想指出 AddMessageFilter 并没有按照我的帖子要求“检查当前线程是否有消息”,也没有“等待当前线程中的消息”。
    • 但是,我必须接受这个作为答案,因为它最接近我想要做的。
    猜你喜欢
    • 1970-01-01
    • 2013-11-01
    • 2011-01-29
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多