代码之家  ›  专栏  ›  技术社区  ›  ChrisW

对于Windows窗体,PostMessage对self的等效性是什么?

  •  3
  • ChrisW  · 技术社区  · 15 年前

    我正在编写一个从 System.Windows.Forms.Control

    Control.KeyDown 事件,观察击键:我应该处理一些击键(例如 <Ctrl>-K )作为热键,使我启动一个对话框。

    onKeyDown 事件处理程序,在我设置 KeyEventArgs.SuppressKeyPress true 然后返回(因此我无法抑制 K onKeyDown 事件处理程序,然后启动该对话框。要做到这一点,在我从 事件处理程序我需要通过某种“启动对话框”事件再次被调用。

    在Win32上,我可以使用 PostMessage 发送消息 WndProc 方法)因为我想严格使用 管理 API(无需 SecurityPermissionFlag::UnmanagedCode ).

    那么,对于线程(我的UI线程)来说,安排异步回调的托管等价物是什么:可能是某种计时器?某种自我- Invoke ?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Jim Harte    15 年前

    我的第一个想法是“设置SurpressKeyPress属性

    你可以这样做:

    ...
    this.BeginInvoke(new InvokeDelegate(showDlg));
    KeyEventArgs.SuppressKeyPress = true;
    ...
    
    
    public void showDlg()
    {
       // create and show dialog here
    }
    
        2
  •  0
  •   MusiGenesis    15 年前

    Thread thread = new Thread(new ThreadStart(LaunchDialog));
    thread.Start();
    

    其中LaunchDialog是启动新对话框窗口的方法。