我遇到的情况是我在事件处理程序中,因此我需要更改某些状态信息。但是,当我仍在处理程序中时,更改是不安全的,因此我需要在退出后执行它。但是,它确实必须在同一线程上执行。它只是将来必须发生,而不是现在。
现在回到Win32时代,您有两种选择可以将消息发送到窗口:
SendMessage
,意思是“立即处理消息!”,通常是因为您当时需要结果,或者... PostMessage
,它只说“将消息添加到窗口的队列中,以便运行循环可以接收它。选项2相当于我要做的事情:“发布”(计划)将来某个时候要执行的代码。
注意:在此处搜索“相当于PostMessage的C#”会给您this seemingly-related question。但是,正如关于
PostMessage
的大多数问题一样,他们也在询问后台线程并在主线程上获取通知,这也不是我要问的。我专门在谈论同一线程,但现在还没有。无论如何,只是试图避免重复的选票,因为这似乎是完全匹配。不是。
那么我不需要调用结果的PostMessage
的C#/ WPF是什么,但是它仍必须在同一线程上发生,并且在当前事件已完全处理之后的某个时间?
答案 0 :(得分: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 :(得分:-1)
一种粗略但易于理解的方法是启用计时器,然后在计时器启动时完成工作。