0

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

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

var settings = Application.UserSettings;

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

我怀疑在get_UserSettings属性获取器中,RCW 将处理 WM_PAINT。如本文所述,我禁用了 WM_PAINT 调度,并且 WM_PAINT 调度停止了,这对证实我的怀疑大有帮助。

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

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

4

0 回答 0