在 C# 中异步接收 class 库中的 Windows 消息

Receiving Windows Message in class library asynchronously in C#

正在编写一个 class 库,其中函数 return 基于使用 window 句柄收到的 window 消息的字符串值。

目前,无法异步等待接收 window 消息。 下面是正在使用的伪代码。

 namespace TestIntialization

 {
    public class Example : Form
    {
        string status = "";
        public string init()
        {
            Example ex = new Example();
            ex.intialise(this.Handle);    // this handle used for receiving window message

            // Need to wait for wndProc handler to update string value.             
            return status;
        }

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0x2000)
            {
                status = "SUCESS";
            }
            if (m.Msg == 0x2001)
            {
                status = "FAILURE";
            }
            base.WndProc(ref m);
        }
    }
}

尝试了 Thread.sleep、EventWaitHandle 的 WaitOne 函数之类的选项,但此函数阻塞了 运行 线程。 我在 WndProc 处理程序中收到预期的 window 消息,但值仅在退出 init 函数后才到达消息处理程序。 因此无法通知调用应用程序有关成功或失败状态。

我们可以通过调用Application.DoEvents()

实现同步事件处理

但是在使用 Application.DoEvents() 函数时会产生一些不良后果。我使用此表单仅用于接收 window 消息,最终用户看不到该表单。所以我现在没有遇到任何问题。

            while(!flag) // flag value will be set true  after processing wnd proc message.
            {
                Application.DoEvents();
            }