Я пишу пользовательский элемент управления, полученный из System.Windows.Forms.Control
.
Элемент управления использует событие Control.KeyDown
для отслеживания нажатий клавиш: я должен обрабатывать некоторые нажатия клавиш (например, <Ctrl>-K
) как горячие клавиши, что заставляет меня запускать диалоговое окно.
Если я запускаю диалоговое окно из моего onKeyDown
обработчика событий, диалоговое окно отображается до того, как я установлю KeyEventArgs.SuppressKeyPress
на true
и вернусь (и поэтому я не могу подавить нажатие клавиши K
). Вместо этого я хотел бы вернуться из обработчика событий onKeyDown
и впоследствии запустить диалоговое окно. Для этого после того, как я вернусь из обработчика события onKeyDown
, мне нужно каким-то образом снова вызвать его, с каким-то событием 'launch the dialog'.
На Win32 я мог бы сгенерировать это событие с помощью API PostMessage
, чтобы отправить себе зарегистрированное оконное сообщение: я получал бы это сообщение сразу после любого предыдущего сообщения в своей очереди сообщений и использовал его в качестве сигнала для запустить мой диалог Однако здесь я не могу использовать функцию PostMessage
(ни метод WndProc
), потому что я хочу использовать строго управляемые API (без необходимости SecurityPermissionFlag::UnmanagedCode
).
Так что было бы управляемым эквивалентом для потока (моего потока пользовательского интерфейса) для планирования асинхронного обратного вызова: возможно, таймер какого-то рода? Что-то вроде себя - Invoke
?