COM 和自动化线程处理注意事项
以下平板电脑线程注意事项特定于何时使用组件对象模型 (COM) 和自动化。
线程安全性
除了 InkPicture 和 InkEdit 控件外,Tablet PC 对象是线程安全的,并且标记为两者。 通过标记为两者,它们可以在单线程单元 (STA) 或多线程单元 (MTA) 中运行。
Windows 窗体使用 STA 模型,因为 Windows 窗体基于本机 Win32 窗口,这些窗口本质上是单元线程。
STA 和 MTA 应用程序
如果应用程序在 MTA 中运行或使用自由线程封送处理 (FTM) ,则必须编写线程安全代码;但是,这样做可以改善某些事件处理性能问题。
InkCollector 和 InkOverlay
应用程序不应释放对 InkCollector 或 InkOverlay 对象的最终引用,从而直接从墨迹线程销毁对象。 相反,应用程序应从应用程序线程释放 InkCollector 或 InkOverlay 对象。
谨慎: 标记为 MTA 或使用 FTM 的应用程序(允许从墨迹线程直接调用应用程序单元)可以直接从墨迹线程释放对 InkCollector 或 InkOverlay 对象的最终引用;但是,这会导致不可恢复的应用程序失败。
事件接收器
如果应用程序未使用 FTM,并且对象及其事件接收器在不同的单元中创建,则事件在为事件接收器提供服务的线程上执行。
事件处理程序中的异常
使用从 Tablet PC 事件处理程序中引发的异常,并且对其余部分或应用程序不可见。 同样,HRESULT 值也不会从平板电脑事件处理程序传播。 如果使用 COM 层的应用程序引发异常,后台线程将终止,异常将丢失。 不会调用其他事件处理程序。
相关主题