代码之家  ›  专栏  ›  技术社区  ›  Mark A. Donohoe

在当前线程上执行代码的PostMessage的C等价物是什么?

  •  1
  • Mark A. Donohoe  · 技术社区  · 6 年前

    我在一个事件处理程序中,需要更改某些状态信息。但是,当我还在处理程序中时进行更改是不安全的,因此我需要在退出后执行它。它

    现在回到Win32时代,向窗口发送消息有两种选择:

    1. SendMessage ,意思是“立即处理消息!”,通常是因为你当时需要结果,或者。。。
    2. PostMessage ,它只说“将消息添加到窗口的队列中,以便运行循环可以提取它。

    选项2相当于我所追求的:“发布”(调度)一些将来某个时候要执行的代码。

    注意:在这里搜索“C#等同于PostMessage”可以 this seemingly-related question . 然而,正如大多数关于 发送消息 是的,他们也在询问后台线程,并在主线程上获得通知,这也不是我要问的。我说的是同一条线,只是不是现在。不管怎样,我只是想避免重复投票,因为这看起来是完全吻合的。不是的。

    发送消息 我不需要调用的结果,但它仍然必须发生在同一个线程上,并且在当前事件完全处理之后的某个时间?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Hasan Emrah Süngü    6 年前

    如果我理解正确的话,那么你想要的就是

    //Will work sync
    SynchronizationContext.Current.Send(...);
    //Will work async
    SynchronizationContext.Current.Post(...);
    

    方法。

    https://blogs.msdn.microsoft.com/pfxteam/2012/06/15/executioncontext-vs-synchronizationcontext/

        2
  •  0
  •   Robin Bennett    6 年前