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

时间:2015-02-02 12:03:22

标签: c# multithreading asynchronous class-library wndproc

编写一个类库,其中函数根据使用窗口句柄接收的窗口消息返回一个字符串值。

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

 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处理程序中收到预期的窗口消息,但值只在退出init函数后才到达消息处理程序。 因此无法通知调用应用程序成功或失败状态。

1 个答案:

答案 0 :(得分:0)

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

同步实现事件处理

但使用Application.DoEvents()函数时会产生一些不必要的后果。我使用此表单只接收窗口消息,表单不会被最终用户看到。所以到目前为止我没有遇到任何问题。

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