Прокси-сервер данных с анализом рукописного ввода
Как упоминалось в разделе Общие сведения об анализе рукописного ввода, технология анализа рукописного ввода внутренне поддерживает модель документов на основе дерева для хранения результатов анализа и связей. Если в приложении уже имеется другое хранилище документов, необходимо использовать функции анализа рукописного ввода, предназначенные для передачи данных между разрозненными моделями документов.
Типы прокси-сервера данных
Функции прокси-сервера данных позволяют приложению:
- Интеграция данных результатов анализа обратно в существующую модель документа.
- Сообщите предыдущие результаты (или состояние) обратно в InkAnalyzer.
- Сообщите о состоянии, отличном от рукописного ввода, в InkAnalyzer.
- Передавать только минимальный набор данных (как предыдущее, так и не рукописное состояние), необходимый для завершения операции анализа.
- Легко обновите внутреннюю модель документа приложения с помощью результатов анализа.
Существует два основных подхода к прокси-серверу анализа рукописного ввода. Различия заключается в том, когда и как происходит синхронизация между моделями документов. Первый подход, синхронное обновление, требует изменения модели документа анализа рукописного ввода по мере изменения в документе приложения. Второй подход, обновление по запросу, требует, чтобы в InkAnalyzer передавались только данные, затронутые изменениями в модели документов приложения. Это значит, что в InkAnalyzer необходимо передавать только данные для частей модели документа анализа рукописного ввода, которые находятся в той же области, что и изменения документа приложения.
Синхронное обновление
Для синхронного обновления требуется изменение (создание и удаление) узлов в коллекции объектов ContextNode объекта InkAnalyzer, так как они происходят в документе приложения. Например, при каждом добавлении текстового слова в приложение в InkAnalyzer создается соответствующий объект ContextNode в стиле TextWord. Если расположение текстового слова на странице изменяется, то расположение соответствующего ContextNode обновляется одновременно. Этот метод менее эффективен с точки зрения вычислительных ресурсов, чем метод по запросу, так как каждое изменение документа включает обновление InkAnalyzer, даже если это изменение не влияет на анализ рукописного ввода.
В следующем примере показано, как работает синхронное обновление. Представьте себе приложение с существующей моделью документа. Когда пользователь вносит изменения в документ, например добавляет новый текст, изменение обрабатывается следующим образом:
- Пользователь создает новые данные.
- Приложение определяет способ обработки данных, их хранения и отрисовки.
- В практических целях следующие действия будут выполняться одновременно.
- Приложение помещает данные в модель документа.
- Приложение создает InkAnalyzer и обновляет его. Одновременное выполнение этого действия гарантирует, что InkAnalyzer всегда содержит самую последнюю информацию.
- Приложение вызывает BackgroundAnalyze в InkAnalyzer , чтобы начать анализ.
- Если изменение включает рукописный ввод, и InkAnalyzer определяет новые результаты, возникает ряд событий. Для каждого изменения, внесенного в коллекцию объектов ContextNode в InkAnalyzer, создается одно событие. К этим событиям относятся ContextNodeCreated, ContextNodeDeleting, ContextNodeMovingToPosition, ContextNodePropertiesUpdated, ContextNodeLinkAdding, ContextNodeLinkDeleting и ContextNodeReparenting. Приложение обрабатывает эти события для перенаправления результатов операции анализа обратно в модель документа по мере необходимости.
- Приложение обновляет макет документа, извлекая новые данные из модели документа.
- Новые данные отрисовывается пользователю.
Обновление по запросу
Подход по запросу требует, чтобы данные передавались только для тех объектов ContextNode , которые находятся в анализируемых областях. Необходимые объекты ContextNode извлекаются из модели документов приложения сразу после вызова операции анализа и еще раз перед согласованием результатов. Хотя реализация более сложна, чем синхронные обновления, этот подход дает лучшие результаты производительности.
Связанные темы