我的应用程序是本机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?