【发布时间】:2010-10-04 13:19:23
【问题描述】:
我正在编写一个从System.Windows.Forms.Control 派生的自定义控件。
控件正在使用Control.KeyDown 事件来观察击键:我应该将一些击键(例如<Ctrl>-K)作为热键处理,这会导致我启动一个对话框。
如果我从onKeyDown 事件处理程序启动对话框,则在我将KeyEventArgs.SuppressKeyPress 设置为true 并返回之前显示对话框(因此我无法抑制K 按键)。相反,我想从onKeyDown 事件处理程序返回,然后启动对话框。为此,在我从 onKeyDown 事件处理程序返回后,我需要以某种方式再次被调用,并带有某种“启动对话框”事件。
在 Win32 上,我可以使用PostMessage API 生成此事件,向自己发送一条已注册的窗口消息:我将在消息队列中的任何先前消息之后立即收到此消息,并将其用作启动我的对话框。但是在这里我不能使用PostMessage 函数(也不能使用WndProc 方法),因为我想使用严格的托管 API(不需要SecurityPermissionFlag::UnmanagedCode)。
那么,对于一个线程(我的 UI 线程)来安排异步回调的托管等效项是什么:也许是某种计时器?某种自我-Invoke?
【问题讨论】:
标签: .net windows winforms controls