Windows消息收到的线程

时间:2016-04-21 07:03:13

标签: c# multithreading winforms windows-messages

我在下面有一个Windows消息接收方法:

protected override void WndProc ( ref Message message )
{
    if ( // some analytic logic  )
    {
        if ( OnCmdReceived != null )
            OnCmdReceived.Invoke ( message );
    }
    else
        base.WndProc ( ref message );
}

使用invoke方法的OnCmdReceived是:

static object _locker = new object( );
private void processCmdReceived ( Message message )
{
    lock ( _locker )
    {
        MessageBox.Show( $"Current Thread ID : {Thread.CurrentThread.ManagedThreadId}" );        
    }
}

结果显示,即使我没有在之前的MessageBox上单击“确定”,屏幕上也只显示一个Messagebox。所有MessageBox的ManagedThread ID都与1相同。

据我所知,如果WndProc中只有一个线程,则下一个收到的消息将等待单击“确定”并进入。或者如果存在多线程方案,则下一个方案也将在_locker中等待,直到前一个线程完成其工作。但在这种情况下,托管ID不应该相同。

怎么会发生?我错过了什么吗?

注意:我已检查过我只将processCmdReceived方法添加到OnCmdReceived event一次。

0 个答案:

没有答案