Каков C # эквивалент PostMessage для выполнения кода в текущем потоке, только в будущем? - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть ситуация, когда я нахожусь в обработчике событий, и мне нужно изменить определенную информацию о состоянии. Тем не менее, это не безопасно изменить, пока я все еще в обработчике, поэтому мне нужно выполнить его после выхода. Однако должен выполняться в том же потоке. Это должно произойти в будущем, а не тогда.

Теперь, в дни Win32, у вас было два варианта отправки сообщений в окно:

  1. SendMessage, что означает «Обрабатывайте сообщение прямо сейчас!», Обычно потому, что вам нужен был результат прямо сейчас, или ...
  2. PostMessage, который только сказал «Добавьте сообщение в очередь окна, чтобы цикл выполнения мог его забрать.

Вариант 2 является эквивалентом того, что мне нужно: «публикация» (планирование) некоторого кода, который будет выполнен в будущем.

Примечание. Поиск здесь "C # эквивалента PostMessage" дает вам этот, казалось бы, связанный вопрос . Однако, как и большинство вопросов о PostMessage, они тоже спрашивают о фоновых потоках и возвращают уведомления в основной поток, что опять-таки не то, что я спрашиваю. Я конкретно говорю о той же теме, только не сейчас. Во всяком случае, просто пытаюсь предотвратить дублирование голосов, поскольку это похоже на точное совпадение. Это не так.

Так что же такое эквивалент C * / WPF PostMessage, где мне не нужен результат вызова, но он все равно должен происходить в том же потоке, и когда-нибудь после того, как текущее событие будет полностью обработано?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Грубый, но простой для понимания метод состоит в том, чтобы включить таймер, а затем выполнять свою работу при срабатывании таймера.

0 голосов
/ 03 сентября 2018

Если я правильно понял, то что вам нужно, это

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

методы соответственно.

Пожалуйста, взгляните и на эту изумительную статью https://blogs.msdn.microsoft.com/pfxteam/2012/06/15/executioncontext-vs-synchronizationcontext/

...