编写一个类库,其中函数根据使用窗口句柄接收的窗口消息返回一个字符串值。
目前,无法异步等待接收窗口消息。 下面是正在使用的伪代码。
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函数后才到达消息处理程序。 因此无法通知调用应用程序成功或失败状态。
答案 0 :(得分:0)
我们可以通过调用Application.DoEvents()
同步实现事件处理但使用Application.DoEvents()函数时会产生一些不必要的后果。我使用此表单只接收窗口消息,表单不会被最终用户看到。所以到目前为止我没有遇到任何问题。
while(!flag) // flag value will be set true after processing wnd proc message.
{
Application.DoEvents();
}