清除Windows消息泵中的消息

时间:2014-11-27 09:32:58

标签: c# multithreading webbrowser-control message-pump

我对Windows Message Pump了解不多,但我想使用Message Pump来​​触发事件。

1)当我的Web浏览器控件导航到某些网站时,它会创建不同的文档完成事件。一旦我在 WebBrowser_Document_Completed() 中拥有我需要的内容,我想忽略所有进一步的文档完成。

我该怎么做?

2)如果我在 Document_Completed(...) 中显示 MessageBox() ,则会显示多个消息框,因此它在并行线程上运行,但是当我调试它时,我发现它总是在主线程上运行。

其他两个线程何时创建?

3)此外,当我按下关闭它关闭窗口但该过程仍然在后台运行。我没有使用任何其他线程但我在调试时仍然看到另外两个线程。

1 个答案:

答案 0 :(得分:0)

最直接的方法是通过覆盖它的WndProc()方法来拦截和评估传播到控件的消息。通过一些调试程序观察,您可以识别与目标事件对应的wm_message常量,然后相应地更改执行流程。在MSDN网站上有一个很好的例子: https://msdn.microsoft.com/en-us/library/system.windows.forms.control.wndproc%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

要了解您正在查看/寻找的消息,请参阅: http://www.pinvoke.net/default.aspx/Constants/WM.html