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

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

线程安全性

除了 InkPictureInkEdit 控件外,Tablet PC 对象是线程安全的,并且标记为两者。 通过标记为两者,它们可以在单线程单元 (STA) 或多线程单元 (MTA) 中运行。

Windows 窗体使用 STA 模型,因为 Windows 窗体基于本机 Win32 窗口,这些窗口本质上是单元线程。

STA 和 MTA 应用程序

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

InkCollector 和 InkOverlay

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

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

事件接收器

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

事件处理程序中的异常

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

C++ 事件接收器示例

常规线程注意事项

托管库线程注意事项