我有一个情况,我在一个事件处理程序,我需要更改某些状态信息。但是,当我还在处理程序中时,更改是不安全的,因此我需要在退出后执行它。但它确实必须在同一个线程上执行。它必须在未来发生,而不是在那时发生。
现在回到Win32时代,您有两种选择将消息发送到窗口:
SendMessage
,意思是'现在处理消息!',通常是因为你当时需要结果,或者......PostMessage
,它只说'将消息添加到Window的队列中,以便运行循环可以接收它。选项2相当于我所追求的内容:“发布”(调度)将来某个时间执行的某些代码。
注意:在这里搜索'C#等效的PostMessage'可以获得this seemingly-related question。但是,由于大多数关于
PostMessage
的问题都是,他们也在询问后台线程并在主线程上收到通知,这也不是我所要求的。我特意谈论同一个帖子,就在现在。无论如何,只是试图避免重复投票,因为这似乎是完全匹配。不是。
那么什么是C#/ WPF相当于PostMessage
,我不需要调用的结果,但它必须仍然发生在同一个线程上,并且在当前事件完全处理后的某个时间?
如果我理解正确,那么你所追求的是
//Will work sync
SynchronizationContext.Current.Send(...);
//Will work async
SynchronizationContext.Current.Post(...);
方法分别。
请看看这篇奇妙的文章以及https://blogs.msdn.microsoft.com/pfxteam/2012/06/15/executioncontext-vs-synchronizationcontext/
原始但易于理解的方法是启用计时器,然后在计时器触发时执行您的工作。