为什么RCW在从自己的公寓中调用它时会处理WM_PAINT

时间:2015-07-09 09:38:02

标签: .net visual-studio-2013 com com-interop rcw

我的应用程序是本机Windows应用程序(MFC / Win32),它通过COM加载.NET插件。该应用程序通过COM(在ATL中实现)公开其文档模型。

我有一行代码在.NET端看起来像这样:

var settings = Application.UserSettings;

在本机应用程序的WM_PAINT处理程序中有一个断点,断点将在此行(以及其他行)中触发。我没有看到堆栈跟踪超过这一点,但我认为它在WM_PAINT处理程序中停止执行,因为它包含我唯一的断点,但我无法看到堆栈超过RCW。 / p>

我怀疑在get_UserSettings属性getter中,RCW将处理WM_PAINT。我按照this article所述禁用了WM_PAINT调度,并停止了WM_PAINT调度,这对确认我的怀疑大有帮助。

这一切都发生在作为STA的UI线程上。 COM对象是STA,是在UI线程上创建的。我认为COM / RCW在进行跨公寓编组时只处理WM_PAINT,而等待方法调用完成执行。

我的问题是:为什么RCW在这种情况下会处理WM_Paint?

0 个答案:

没有答案