COM 和自动化线程处理注意事项

以下平板电脑线程处理注意事项特定于使用组件对象模型(COM)和自动化时的注意事项。

线程安全性

除了 InkPictureInkEdit 控件之外,平板电脑对象是线程安全的,并标记为两者。 通过被标记为两种类型,它们可以在单线程单元(STA)或多线程单元(MTA)中运行。

Windows 窗体使用 STA 模型,因为 Windows 窗体基于本机 Win32 窗口,并且使用 Win32 窗口和 COM 的线程应使用单线程单元。

STA 和 MTA 应用程序

如果应用程序在 MTA 中运行或使用自由线程封送处理器(FTM),则必须编写线程安全代码;但是,这样做可以提高某些事件处理性能问题。

InkCollector 和 InkOverlay

应用程序不应释放对 InkCollectorInkOverlay 对象的最终引用,从而直接从墨迹线程销毁对象。 相反,应用程序应从应用程序线程释放 InkCollectorInkOverlay 对象。

谨慎: 标记为 MTA 或使用 FTM 的应用程序(允许从墨迹线程直接调用应用程序单元)可以直接从墨迹线程释放对 InkCollectorInkOverlay 对象的最终引用;但是,这会导致无法恢复的应用程序失败。

事件接收器

如果应用程序未使用 FTM,并且对象及其事件接收器在不同的单元中创建,则事件会在为事件接收器提供服务的线程上执行。

事件处理程序中的异常

在平板电脑事件处理程序中引发的异常会被吞掉,且对您的应用程序的其余部分不可见。 同样,HRESULT 值不会从平板电脑事件处理程序传播。 如果使用 COM 层的应用程序引发异常,后台线程将终止,并且异常将丢失。 不会调用其他事件处理程序。

C++事件接收器示例

常规线程处理注意事项

托管库线程处理注意事项