常规线程注意事项
以下是针对平板电脑进行开发时的一般线程注意事项。
应用程序和非应用程序线程
所有墨迹事件都在单独的高优先级墨迹线程上生成。 这样,即使应用程序运行缓慢,墨迹也能顺利流动。 但是,事件处理程序可能会减慢或阻止墨迹的呈现。
由背景识别方法调用生成的所有识别事件都在单独的正常优先级背景识别线程上处理。
所有鼠标事件都在应用程序的main用户界面 (UI) 线程上生成。
性能注意事项
事件处理程序
平板电脑平台应用程序编程接口 (API) 具有事件的交互式模型,而不是通知模型。 使事件处理程序中的代码保持简短,以减少墨迹呈现被阻止的时间。 不会阻止平板电脑收集墨迹,但应用程序在应用程序被阻止时不会收到墨迹。
AutoRedraw 属性
当应用程序执行自定义呈现或应用程序对绘制问题敏感时,可以自行处理重新绘制,并将 InkCollector 对象、InkOverlay 对象或 InkPicture 控件的 AutoRedraw 属性设置为 false。 使用下表中的事件来处理重新绘制。
对象或控件 | 事件 |
---|---|
InkCollector 对象 |
基础控件的 Control.Invalidated 和 Control.Paint 事件。 |
InkOverlay 对象 |
基础控件的 Control.Invalidated 和 Control.Paint 事件。 |
InkPicture 控制 |
InkPicture 控件继承的 Control.Invalidated 和 Control.Paint 事件。 |
DynamicRendering 属性
当应用程序执行自定义呈现或需要信息(而不是墨迹)时,你可以自行处理墨迹的铺设,并通过将 InkCollector 对象、InkOverlay 对象或 InkPicture 控件的 DynamicRendering 属性设置为 false 来关闭墨迹的实时呈现。
事件线程处理注意事项
平板电脑平台 API 事件在各种线程上引发。
InkCollector 和 InkOverlay 对象事件
大多数 InkCollector 和 InkOverlay 对象事件在墨迹线程上引发。 UI 线程上仅引发这些对象的鼠标事件。 例如,对于 InkCollector 对象, MouseDown 事件在 UI 线程上引发, CursorDown 事件在墨迹线程上引发。
Ink 对象和笔划集合事件
Ink 对象和笔划集合事件可能来自墨迹线程或 UI 线程。 当应用程序操作 Ink 对象或 Strokes 集合时,将在 UI 线程中生成事件。 当 InkCollector 或 InkOverlay 对象更新 Ink 对象或 Strokes 集合时,将在墨迹线程中生成 事件。
InkPicture 和 InkEdit 控件在单线程单元中运行, (STA) 。 当 InkPicture 或 InkEdit 控件更新 Ink 对象或 Strokes 集合时,该事件在 UI 线程上引发。
识别事件
识别事件在 UI 线程或后台识别线程上引发。
- InkEdit 控件的 Recognize 方法引发的识别 (托管库仅在 UI 线程上) 或 RecognitionResult (自动化) 事件。
- RecognizerContext 对象的 BackgroundRecognize 和 BackgroundRecognizeWithAlternates 方法在后台识别线程上引发 Recognition 和 RecognitionWithAlternates 事件。
笔输入面板事件
PenInputPanel 事件在创建 PenInputPanel 对象的线程上引发。