Архитектура API StylusInput
API-интерфейсы StylusInput позволяют взаимодействовать с потоком данных пера планшета. Для взаимодействия с потоком данных добавьте объект RealTimeStylus в приложение и добавьте подключаемые модули в объект RealTimeStylus .
В api-интерфейсах StylusInput предоставляются два подключаемых модуля. Объект DynamicRenderer реализует интерфейс IStylusSyncPlugin . Объект DynamicRenderer отрисовывает рукописный ввод в режиме реального времени по мере его рисования. Объект GestureRecognizer реализует интерфейсы IStylusSyncPlugin и IStylusAsyncPlugin . Объект GestureRecognizer распознает жесты приложения.
Определения
Следующие термины используются в разделах, описывающих API StylusInput:
Синхронный подключаемый модуль
Класс, реализующий интерфейс IStylusSyncPlugin . Синхронные подключаемые модули обычно вызываются непосредственно объектом RealTimeStylus .
Асинхронный подключаемый модуль
Класс, реализующий интерфейс IStylusAsyncPlugin . Асинхронные подключаемые модули обычно вызываются в потоке пользовательского интерфейса приложения.
Коллекция синхронных подключаемых модулей
Коллекция StylusSyncPluginCollection , которая является упорядоченной коллекцией объектов IStylusSyncPlugin . Синхронная коллекция подключаемых модулей обычно относится к коллекции, назначенной свойству SyncPluginCollection объекта RealTimeStylus . В коллекцию синхронных подключаемых модулей можно добавлять только синхронные подключаемые модули.
Коллекция асинхронных подключаемых модулей
Коллекция StylusAsyncPluginCollection , которая является упорядоченной коллекцией объектов IStylusAsyncPlugin . Асинхронная коллекция подключаемых модулей обычно относится к коллекции, назначенной свойству AsyncPluginCollection объекта RealTimeStylus . В коллекцию асинхронных подключаемых модулей можно добавлять только асинхронные подключаемые модули.
Синхронные и асинхронные подключаемые модули
Объект RealTimeStylus предназначен для предоставления доступа к потоку данных в режиме реального времени из пера планшета. Создавайте или используйте синхронные подключаемые модули для задач, требующих доступа к потоку данных в режиме реального времени и не требующих вычислительных ресурсов, например для фильтрации пакетов. Создавайте или используйте асинхронные подключаемые модули для задач, которым не требуется доступ к потоку данных в режиме реального времени, например для создания и хранения штрихов в объекте InkDisp .
Некоторые задачи могут быть ресурсоемкими, но требуют доступа к потоку данных в режиме реального времени, например распознавание жестов с несколькими ударами. Для удовлетворения этих потребностей API StylusInput предоставляют каскадную модель RealTimeStylus , которая позволяет использовать два объекта RealTimeStylus , каждый из которых выполняется в собственном потоке. Дополнительные сведения о каскадной модели RealTimeStylus см. в разделе Каскадная модель RealTimeStylus.
Дополнительные сведения об использовании и создании подключаемых модулей см. в статье Работа с API StylusInput.
Поток данных пера планшета
Объект RealTimeStylus имеет две внутренние очереди, которые содержат данные пера планшета: входную и выходную очередь. Данные пера преобразуются в экземпляры классов в пространстве имен Microsoft.StylusInput.PluginData . В следующем списке показано, как объект RealTimeStylus обрабатывает данные пера планшета:
Объект RealTimeStylus проверяет наличие подключаемых объектов данных сначала во входной очереди, а затем из потока данных пера планшета.
Объект RealTimeStylus отправляет один объект данных подключаемого модуля объектам в синхронной коллекции подключаемых модулей. Каждый синхронный подключаемый модуль может добавлять данные во входную или выходную очередь.
После отправки объекта данных подключаемого модуля всем членам синхронной коллекции подключаемых модулей объект данных подключаемого модуля помещается в очередь вывода объекта RealTimeStylus .
Затем объект RealTimeStylus проверяет наличие следующего объекта данных подключаемого модуля для обработки.
В то время как выходная очередь объекта RealTimeStylus содержит данные, объект RealTimeStylus отправляет один объект данных подключаемого модуля из выходной очереди в объекты в своей асинхронной коллекции подключаемых модулей. Каждый асинхронный подключаемый модуль может добавлять данные во входную или выходную очередь. Однако так как асинхронные подключаемые модули выполняются в потоке пользовательского интерфейса, данные добавляются в очередь по отношению к текущим данным пера, обрабатываемых объектом RealTimeStylus , а не к данным, обрабатываемых асинхронным подключаемым модулем.
На следующей схеме показан поток данных пера планшета через объект RealTimeStylus и его коллекции подключаемых модулей.
На этой схеме круги с метками "A" и "B" представляют данные пера планшета, которые уже были добавлены в очередь вывода объекта RealTimeStylus и еще не отправлены в асинхронную коллекцию подключаемых модулей. Круг с меткой "C" представляет данные пера планшета, которые в настоящее время обрабатывает объект RealTimeStylus . Он отправляется в синхронную коллекцию подключаемых модулей и помещается в очередь вывода. Пустой круг представляет позицию в очереди вывода, в которую добавляются будущие данные пера планшета.
Дополнительные сведения о том, как конкретные данные добавляются в очередь и обрабатываются, см. в разделе Подключаемые данные и класс RealTimeStylus.
API StylusInput
API StylusInput находятся в основном в пространствах имен Microsoft.StylusInput и Microsoft.StylusInput.PluginData . Однако API StylusInput также ссылаются на некоторые классы в пространстве имен Microsoft.Ink , такие как класс Tablet , коллекция TabletPropertyDescriptionCollection и перечисления ApplicationGesture и SystemGesture .
Связанные темы