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

问题描述 投票:1回答:2

我有一个情况,我在一个事件处理程序,我需要更改某些状态信息。但是,当我还在处理程序中时,更改是不安全的,因此我需要在退出后执行它。但它确实必须在同一个线程上执行。它必须在未来发生,而不是在那时发生。

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

  1. SendMessage,意思是'现在处理消息!',通常是因为你当时需要结果,或者......
  2. PostMessage,它只说'将消息添加到Window的队列中,以便运行循环可以接收它。

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

注意:在这里搜索'C#等效的PostMessage'可以获得this seemingly-related question。但是,由于大多数关于PostMessage的问题都是,他们也在询问后台线程并在主线程上收到通知,这也不是我所要求的。我特意谈论同一个帖子,就在现在。无论如何,只是试图避免重复投票,因为这似乎是完全匹配。不是。

那么什么是C#/ WPF相当于PostMessage,我不需要调用的结果,但它必须仍然发生在同一个线程上,并且在当前事件完全处理后的某个时间?

c# wpf postmessage runloop
2个回答
1
投票

如果我理解正确,那么你所追求的是

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

方法分别。

请看看这篇奇妙的文章以及https://blogs.msdn.microsoft.com/pfxteam/2012/06/15/executioncontext-vs-synchronizationcontext/


-1
投票

原始但易于理解的方法是启用计时器,然后在计时器触发时执行您的工作。

© www.soinside.com 2019 - 2024. All rights reserved.