将来在当前线程上执行代码的 C# 等效项是什么?



我遇到一种情况,即我在事件处理程序中,我需要更改某些状态信息。 但是,当我仍在处理程序中时进行更改是不安全的,因此我需要在退出后执行它。但是,它必须在同一线程上执行。它只是必须在未来发生,而不是就在那时。

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

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

选项 2 相当于我所追求的:"发布"(调度(一些代码,以便在将来的某个时候执行。

注意:在这里搜索"C#等效的PostMessage"会给你这个看似相关的问题。 但是,正如大多数关于PostMessage的问题一样,他们也在询问后台线程并在主线程上获取通知,这又不是我要问的。我专门谈论的是同一个线程,只是不是现在。无论如何,只是试图避免重复投票,因为这似乎是完全匹配的。不是。

那么,在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/

一种粗略但易于理解的方法是启用计时器,然后在计时器触发时执行工作。

相关内容

  • 没有找到相关文章

最新更新