Поделиться через


Общие сведения о надстройках Windows Presentation Foundation

Обновлен: Ноябрь 2007

Компонент .NET Framework включает модель надстройки, которою разработчики могут использовать для создания приложений, поддерживающих расширяемость надстроек. Эта модель надстройки позволяет интегрировать надстройки и расширять функциональные возможности приложения. В некоторых сценариях приложения также должны отображать несколько пользовательских интерфейсов Пользовательские интерфейсы, предоставляемых надстройками. В этом разделе рассматривается порядок добавления модели надстройки .NET Framework приложением WPF для поддержки таких сценариев, лежащая в основе этого архитектура ее преимущества и ограничения.

В этом разделе содержатся следующие подразделы.

  • Предварительные условия
  • Примеры
  • Общие сведения о надстройках
  • .Общие сведения о моделях надстроек платформы .NET Framework
  • Надстройки WPF
  • Надстройка возвращает интерфейс пользователя
  • Надстройка является интерфейсом пользователя
  • Возвращение нескольких пользовательских интерфейсов из надстройки
  • Надстройки и приложения обозревателя XAML
  • Архитектура надстройки WPF
  • Преимущества надстроек WPF
  • Ограничения надстройки WPF
  • Оптимизация производительности
  • Связанные разделы

Предварительные условия

Знакомство с моделью надстройки .NET Framework является обязательным. Дополнительные сведения см. в разделе Обзор надстройки.

Примеры

В этом разделе используется следующие примеры для демонстрации расширения модели надстройки .NET Framework приложением WPF.

Общие сведения о надстройках

Чтобы избежать сложности перекомпиляции и повторного развертывания приложения для внедрения новых функциональный возможностей, в приложениях реализуются механизмы расширяемости, позволяющие разработчикам (основным и сторонним производителям) создавать приложения, поддерживающие интеграцию с предыдущим приложением. Наиболее распространенным способом поддержки этого типа расширяемости является внутреннее использование надстроек (также называемых встроенными компонентами или подключаемыми модулями). Ниже приведены примеры реальных приложений, которые обеспечивают расширяемость с помощью надстроек.

  • Встроенные компоненты Internet Explorer.

  • Подключаемые модули проигрывателя Windows Media.

  • Надстройки Visual Studio.

Например, модель надстройки проигрывателя Windows Media позволяет сторонним разработчикам реализовать подключаемые модули, которые различными способами расширяют проигрыватель, включая создание декодеров и кодировщиков для форматов мультимедиа, изначально не поддерживаемых проигрывателем Windows Media (например DVD, MP3), звуковые эффекты и обложки. Каждая модель надстройки встраивается для предоставления функциональных возможностей, уникальных для приложения, хотя существует несколько элементов и поведений, общих для всех моделей надстроек.

К основным трем элементам типичных решений расширяемости надстроек относятся контракты, надстройки и ведущие приложения. Контракты определяют порядок интеграции надстройки с ведущим приложением следующими двумя способами.

  • Надстройки интегрируются с функциональными возможностями, реализуемыми ведущими приложениями.

  • Ведущие приложения предоставляют функциональные возможности для интеграции с надстройками.

Чтобы использовать надстройки, ведущие приложения должны найти их и загрузить во время выполнения. Поэтому приложения, поддерживающие надстройки, имеют следующие дополнительные обязанности.

  • Обнаружение: поиск надстроек, которые соответствуют контрактам, поддерживаемым приложениями.

  • Активация: загрузка, запуск и установка соединения с надстройками.

  • Изоляция: использование доменов приложений или процессов для установления границ изоляции, защищающих приложения от потенциальных проблем безопасности и неполадок в надстройках.

  • Соединение: разрешение надстройкам и ведущим приложениям взаимодействовать друг с другом через границы изоляции, путем вызова методов и передачи данных.

  • Управление временем жизни: загрузка и отправка доменов приложений и процессов ясным, прогнозируемым способом (см. Общие сведения о доменах приложений).

  • Управление версиями: проверка того, что ведущие приложения и надстройки могут взаимодействовать после их обновления.

В конечно счете, разработка надежной модели надстройки является нетривиальный задачей. По этой причине, компонент .NET Framework предоставляет инфраструктуру для построения моделей надстройки.

Bb909794.alert_note(ru-ru,VS.90).gifПримечание.

Более подробные сведения о надстройках см. в разделе Обзор надстройки.

.Общие сведения о моделях надстроек платформы .NET Framework

Модель надстроек .NET Framework, находящаяся в пространстве имен System.AddIn, содержит набор типов, которые предназначены для упрощения разработки расширяемости надстроек. Базовым модулем модели надстройки .NET Framework является контракт, который определяет порядок взаимодействия ведущего приложения и надстройки. Контракт отображается в ведущем приложении с помощью отдельного представления контракта для ведущего представления. Таким же образом, отдельное представление контракта для надстройки отображается в надстройке. Для связи между ведущим приложением и надстройкой и соответствующими представлениями контракта используется адаптер. Контракты, представления и адаптеры относятся к сегментам, и набор связанных сегментов составляет конвейер. Модель надстроек .NET Framework использует конвейеры как основу для поддержки обнаружения, активации, изоляции безопасности, изоляции выполнения (с помощью доменов приложений и процессов), связи, управления временем жизни и управления версиями.

Суммарно эта поддержка позволяет разработчикам создавать надстройки, интегрируемые с функциональными возможностями ведущего приложения. Однако в некоторых сценариях ведущее приложение должно отображать несколько пользовательских интерфейсов Пользовательские интерфейсы, предоставляемых надстройками. Поскольку каждая технология представления в компоненте .NET Framework имеет собственную модель для реализации Пользовательские интерфейсы, модель надстройки .NET Framework не поддерживает какую-либо отдельную технологию представления. Вместо этого, WPF расширяет модель надстройки .NET Framework посредством поддержки Пользовательский интерфейс для надстроек.

Надстройки WPF

Приложение WPF в сочетании с моделью надстройки .NET Framework позволяет реализовать широкий ряд сценариев, требующих отобразить Пользовательские интерфейсы из надстроек в ведущем приложении. В частности, эти сценарии реализованы посредством WPF со следующими двумя моделями программирования.

  1. Надстройка возвращает пользовательский интерфейс. Надстройка возвращает Пользовательский интерфейс ведущему приложению с помощью вызова метода, как определено в контракте. Этот сценарий используется в следующих случаях.

    • Внешний вид Пользовательский интерфейс, который возвращается надстройкой, зависит от данных или состояния во время выполнения, например — динамически созданные отчеты.

    • Пользовательский интерфейс для служб, предоставляемых надстройкой, отличается от Пользовательский интерфейс ведущих приложений, которые могут использовать надстройку.

    • Надстройка, в первую очередь, выполняет службу для ведущего приложения и создает для него отчет о состоянии с помощью Пользовательский интерфейс.

  2. Надстройка является пользовательским интерфейсом. Надстройка является пользовательским интерфейсом Пользовательский интерфейс, как определено в контракте. Этот сценарий используется в следующих случаях.

    • Надстройка не предоставляет служб, кроме тех, которые отображаются, такие как объявление.

    • Пользовательский интерфейс Пользовательский интерфейс для служб, предоставляемых надстройкой, является общим для всех ведущих приложений, которые могут использовать эту надстройку, например калькулятор или палитра цветов.

Эти сценарии требуют, чтобы объекты Пользовательский интерфейс могли передаваться между ведущими приложениями и доменами приложений надстроек. Поскольку модель надстроек .NET Framework использует удаленное взаимодействие между доменами приложений, объекты, которые передаются между ними, должны поддерживать удаленный режим.

Удаленный объект является экземпляром класса, который относится к следующим процессам.

Bb909794.alert_note(ru-ru,VS.90).gifПримечание.

Дополнительные сведения о создании удаленных объектов .NET Framework см. в разделе Making Objects Remotable. Обзор удаленного взаимодействия см. в разделе .NET Framework Remoting Overview.

Типы пользовательского интерфейса Пользовательский интерфейс приложения WPF не поддерживают удаленное взаимодействие. Чтобы решить проблему, приложение WPF расширяет модель надстройки .NET Framework, чтобы включить пользовательский интерфейс Пользовательский интерфейс приложения WPF, созданный надстройками для отображения из ведущих приложений. Эта поддержка обеспечивается приложением WPF посредством двух типов: интерфейсом INativeHandleContract и двумя статическими методами, реализованными классом FrameworkElementAdapters: ContractToViewAdapter и ViewToContractAdapter. На высоком уровне эти типы и методы используются следующим образом.

  1. Приложение WPF требует, чтобы несколько пользовательских интерфейсов Пользовательские интерфейсы, предоставляемых надстройками, были прямо или косвенно производными классами объектов FrameworkElement, таких как фигуры, элементы управления, пользовательские элементы управления, панели макетов и страницы.

  2. Везде, где контракт объявляет, что пользовательский интерфейс будет передан между надстройкой и ведущим приложением, он должен быть объявлен как объект INativeHandleContract (не объект FrameworkElement); объект INativeHandleContract является удаленным представлением пользовательского интерфейса Пользовательский интерфейс надстройки, который может быть передан через границы изоляции.

  3. Перед передачей из домена приложения надстройки объект FrameworkElement упаковывается как INativeHandleContract путем вызова метода ViewToContractAdapter.

  4. После передачи в домен ведущего приложения объект INativeHandleContract должен быть распакован как FrameworkElement путем вызова метода ContractToViewAdapter.

Порядок использования объекта INativeHandleContract и метода ContractToViewAdapter и ViewToContractAdapter зависит от конкретного сценария. В следующих разделах содержатся сведения для каждой модели программирования.

Надстройка возвращает интерфейс пользователя

Чтобы надстройка возвратила Пользовательский интерфейс ведущему приложению, требуются следующие условия.

  1. Ведущее приложение, надстройка и конвейер должны быть созданы, как описано в документации .NET FrameworkНадстройки и расширения среды.

  2. Контракт должен реализовывать объект IContract, и чтобы вернуть Пользовательский интерфейс, контракт должен объявить метод с возвращаемым значением типаINativeHandleContract.

  3. Пользовательский интерфейс Пользовательский интерфейс, который передается между надстройкой и ведущим приложением, должен быть прямо или косвенно производным объекта FrameworkElement.

  4. Пользовательский интерфейс Пользовательский интерфейс, возвращаемый надстройкой, перед пересечением границы изоляции должен быть преобразован из объекта FrameworkElement в объект INativeHandleContract.

  5. После пересечения границы изоляции возвращаемый пользовательский интерфейс Пользовательский интерфейс должен быть преобразован из объекта INativeHandleContract в объект FrameworkElement.

  6. Ведущее приложение отображает возвращаемый объект FrameworkElement.

Пример, демонстрирующий реализацию надстройки, которая возвращает пользовательский интерфейс Пользовательский интерфейс, см. в разделе Практическое руководство. Создание надстройки, возвращающей пользовательский интерфейс. Полный пример см. в разделе Пример использования надстроек, возвращающих пользовательский интерфейс.

Надстройка является интерфейсом пользователя

Если надстройкой является Пользовательский интерфейс, необходимы следующие условия.

  1. Ведущее приложение, надстройка и конвейер должны быть созданы, как описано в документации .NET FrameworkНадстройки и расширения среды.

  2. Интерфейс контракта для надстройки должен реализовывать INativeHandleContract.

  3. Надстройка, которая передается в ведущее приложение, должна быть прямо или косвенно производной объекта FrameworkElement.

  4. Перед пересечением границы изоляции надстройка должна быть преобразована из объекта FrameworkElement в объект INativeHandleContract.

  5. После пересечения границы изоляции надстройка должна быть преобразована из объекта INativeHandleContract в объект FrameworkElement.

  6. Ведущее приложение отображает возвращаемый объект FrameworkElement.

Пример, демонстрирующий реализацию надстройки, которая возвращает пользовательский интерфейс Пользовательский интерфейс, см. в разделе Практическое руководство. Создание надстройки, возвращающей пользовательский интерфейс. Полный пример см. в разделе Пример использования надстроек в качестве элементов пользовательского интерфейса.

Возвращение нескольких пользовательских интерфейсов из надстройки

Надстройки часто предоставляют несколько пользовательских интерфейсов Пользовательские интерфейсы для отображения в ведущих приложениях. Например, рассмотрим надстройку, являющуюся пользовательским интерфейсом Пользовательский интерфейс, которая предоставляет сведения о состоянии ведущему приложению, а также пользовательский интерфейс Пользовательский интерфейс. Подобная надстройка может быть реализована путем сочетания технологии их обеих моделей Надстройка возвращает пользовательский интерфейс и Надстройка является пользовательским интерфейсом.

Полный пример такой реализации см. в разделе Пример надстройки с несколькими пользовательскими интерфейсами.

Надстройки и приложения обозревателя XAML

До сих пор в примерах рассматривалось автономно установленное ведущее приложение. Однако надстройки также может размещать приложение XBAP (XAML browser applications — приложения обозревателя XAML) со следующими дополнительными требованиями к построению и реализации.

  • Манифест приложения XBAP должен быть настроен отдельно для загрузки конвейера (папок и сборок) и сборки надстройки в кэш приложения ClickOnce на клиентском компьютере, в той же папке, в которой находится приложение XBAP.

  • Код XBAP для обнаружения и загрузки надстроек должен использовать для приложения XBAP кэш приложения ClickOnce в качестве местоположения конвейера и надстройки.

  • Приложение XBAP должно загружать надстройку в отдельный контекст безопасности, если надстройка ссылается на свободные файлы, которые находятся на узле источника; при размещении приложением XBAP надстройки могут только ссылаться на свободные файлы, находящиеся на узле источника ведущего приложения.

Эти задачи описаны в следующих подразделах.

Bb909794.alert_note(ru-ru,VS.90).gifПримечание.

Сведения о полной реализации приложения XBAP, размещающего надстройку, см. в разделе Пример надстройки с XBAP в качестве главного приложения.

Настройка конвейера и надстройки для развертывания ClickOnce

Приложения XBAP загружаются в безопасную папку и запускаются из нее в кэше развертывания ClickOnce. Для размещения надстройки приложением XBAP сборка конвейера и надстройки должна также загружаться в безопасную папку. Для этого необходимо настроить манифест приложения, чтобы включить сборку конвейера и надстройки для загрузки. Наиболее легко это можно сделать в приложении Visual Studio, хотя сборка конвейера и надстройки должна находиться в корневой папке проекта ведущего приложения XBAP, чтобы приложение Visual Studio могло обнаружить сборки конвейера.

Поэтому первым шагом является построение сборки конвейера и надстройки в корне проекта XBAP с помощью задания вывода построения каждого проекта сборки конвейера и надстройки. В следующей таблице показаны пути вывода построения для проектов сборки конвейера и проекта сборки надстройки, которые находятся в том же решении и корневой папке, что и проект ведущего приложения XBAP.

Таблица 1. Пути вывода построения для сборок конвейера, размещаемых приложением XBAP

Проект сборки конвейера

Путь вывода построения

Контракт

..\HostXBAP\Contracts\

Представление надстройки

..\HostXBAP\AddInViews\

Адаптер на стороне надстройки

..\HostXBAP\AddInSideAdapters\

Адаптер на стороне узла

..\HostXBAP\HostSideAdapters\

Надстройка

..\HostXBAP\AddIns\WPFAddIn1

Следующим шагом является определение сборок конвейеров и сборки надстройки как файлов содержимого XBAP в приложении Visual Studio с помощью следующих действий.

  1. Включите сборку конвейера и надстройки в проекте — для этого щелкните правой кнопкой каждую папку конвейера в обозревателе решений и выберите Включить в проект.

  2. В окне Свойства установите для параметра Действие при построении каждой сборки конвейера и надстройки значение Содержимое.

Заключительным шагом является настройка манифеста приложения, чтобы включить файлы сборки конвейера и файл сборки надстройки для загрузки. Файлы должны находиться в папках в корневом каталоге в кэше ClickOnce, который занимает приложение XBAP. Настройку можно выполнить в приложении Visual Studio с помощью следующих действий.

  1. Щелкните правой кнопкой проект XBAP, выберите Свойства, Публикация и затем — Файлы приложений.

  2. В диалоговом окне Файлы приложений установите для параметра Состояние публикации каждого конвейера и библиотеки DLL надстройки значение Включить (Авто) и для параметра Группа загрузки каждого конвейера и библиотеки DLL — значение (обязательный).

Использование конвейера и надстройки из базовой папки приложения

Если конвейер и надстройка сконфигурированы для развертывания ClickOnce, они загружаются в ту же папку кэша ClickOnce, что и XBAP. Чтобы использовать конвейер и надстройку из приложения XBAP, код XBAP должен получить их из базовой папки приложения. Различные типы и члены модели надстройки .NET Framework предоставляют отдельную поддержку этого сценария для использования конвейеров и надстроек. Сначала путь определяется значением перечисления ApplicationBase. Используйте это значение с перегрузками соответствующих членов надстройки для использования конвейеров, которые включают следующие члены:

Доступ к узлу источника

Чтобы убедиться, что надстройка может ссылаться на файлы узла источника, она должна быть загружена с изоляцией безопасности, которая соответствует ведущему приложению. Этот уровень безопасности определяется значением перечисления AddInSecurityLevel.Host и передается методу Activate при активации надстройки.

Архитектура надстройки WPF

На самом высоком уровне, как мы уже видели, WPF позволяет надстройкам .NET Framework реализовать несколько пользовательских интерфейсов Пользовательские интерфейсы (которые являются прямо или косвенно производными объекта FrameworkElement) с помощью объекта INativeHandleContract и методов ViewToContractAdapter и ContractToViewAdapter. В результате, ведущее приложение возвращает объект FrameworkElement, который отображается из пользовательского интерфейса Пользовательский интерфейс в ведущем приложении.

Для простых сценариев надстройки Пользовательский интерфейс эти сведения достаточны для требований разработчика. Для более сложных сценариев, особенно тех, в которых предпринимается попытка применить дополнительные службы WPF, такие как макет, ресурсы и привязка данных, необходимы более подробные сведения о том, как WPF расширяет модель надстройки .NET Framework с поддержкой Пользовательский интерфейс, чтобы понять преимущества и ограничения.

В действительности, приложение WPF не передает Пользовательский интерфейс из надстройки в ведущее приложение; вместо этого WPF передает дескриптор окна Win32 для Пользовательский интерфейс, используя взаимодействие WPF. По существу, когда Пользовательский интерфейс передается из надстройки в ведущее приложение, происходит следующее.

  • На стороне надстройки приложение WPF получает дескриптор окна для пользовательского интерфейса Пользовательский интерфейс, который будет отображен ведущим приложением. Дескриптор окна инкапсулируется внутренним классом WPF, производным объекта HwndSource, и реализует объект INativeHandleContract. Экземпляр этого класса возвращается с помощью метода ViewToContractAdapter и маршалируется из домена приложения надстройки в домен ведущего приложения.

  • На стороне ведущего приложения WPF повторно пакетирует объект HwndSource как внутренний класс WPF, производный объекта HwndHost, и принимает класс INativeHandleContract. Экземпляр этого класса возвращается в ведущее приложение посредством метода ContractToViewAdapter.

Класс HwndHost существует для отображения нескольких пользовательских интерфейсов Пользовательские интерфейсы, определенных дескриптором окна, из интерфейсов Пользовательские интерфейсы приложения WPF. Дополнительные сведения см. в разделе Общие сведения о взаимодействии WPF и Win32.

Таким образом, объект INativeHandleContract и методы ViewToContractAdapter и ContractToViewAdapter существуют для того, чтобы разрешить дескриптору окна передать пользовательский интерфейс Пользовательский интерфейс приложения WPF из надстройки в ведущее приложение, где он инкапсулируется объектом HwndHost и отображает пользовательский интерфейс Пользовательский интерфейс ведущего приложения.

Bb909794.alert_note(ru-ru,VS.90).gifПримечание.

Поскольку ведущее приложение получает объект HwndHost, оно не может объект, возвращаемый с помощью метода ContractToViewAdapter, преобразовать в тип, в котором он реализуется надстройкой (например, UserControl).

По своему типу, объект HwndHost имеет определенные ограничения, которые влияют на то, как ведущие приложения могут их использовать. Тем не менее приложение WPF расширяет объект HwndHost несколькими возможностями для сценариев надстройки. Эти преимущества и ограничения описаны ниже.

Преимущества надстроек WPF

Поскольку несколько пользовательских интерфейсов Пользовательские интерфейсы надстройки WPF отображается из ведущего приложения с помощью внутреннего класса, производного из объекта HwndHost, эти интерфейсы Пользовательские интерфейсы ограничены возможностями объекта HwndHost, связанными со службами Пользовательский интерфейсWPF, такими как макет, визуализация, привязка данных, стили, шаблоны и ресурсы. Однако WPF дополняет свой внутренний подкласс HwndHost дополнительными возможностями, включая следующие.

  • Переход между Пользовательский интерфейс ведущего приложения хост и Пользовательский интерфейс надстройки. Обратите внимание, что для модели программирования «надстройка является Пользовательский интерфейс», требуется адаптер на стороне надстройки для переопределения метода QueryContract, чтобы включить переход с учетом того, обладает ли надстройка полным или частичным доверием.

  • Соблюдение требований доступности для Пользовательские интерфейсы надстроек, отображаемых из Пользовательские интерфейсы ведущего приложения.

  • Включение приложений WPF для безопасной работы в нескольких сценариях домена приложений.

  • Предотвращение незаконного доступа к дескрипторам окна Пользовательский интерфейс надстройки, когда надстройка запущена в режиме изоляции безопасности (то есть в режиме безопасности с частичным доверием «песочница»). Вызов метода ViewToContractAdapter гарантирует следующую безопасность.

    • Для модели программирования «надстройка возвращает Пользовательский интерфейс» единственным способом передачи дескриптора окна для Пользовательский интерфейс надстройки через границу изоляции является вызов метода ViewToContractAdapter.

    • Для модели программирования «надстройка является Пользовательский интерфейс» требуется переопределение метода QueryContract в адаптере на стороне надстройки и вызов метода ViewToContractAdapter (как показано в предыдущем примере), как при вызове реализации QueryContract адаптера на стороне надстройки из адаптера на стороне узла.

  • Предоставление множественной защиты выполнения домена приложения. Вследствие ограничений доменов приложений, необработанные исключения, которые создаются в надстройке доменов приложений, вызывают сбой всего приложения, даже если существует граница изоляции. Однако WPF и модель надстройки .NET Framework предоставляют простой способ для решения этой проблемы и повышения стабильности работы приложения. Надстройка WPF, которая отображает Пользовательский интерфейс, создает объект Dispatcher для потока, в котором выполняется домен приложения, если ведущим приложением является приложение WPF. Можно обнаружить все необработанные исключения, возникающие в домене приложения, обрабатывая событие UnhandledException объекта Dispatcher надстройки WPF. Объект Dispatcher можно получить из свойства CurrentDispatcher.

Ограничения надстройки WPF

Кроме преимуществ, которые приложение WPF добавляет к поведению по умолчанию, обеспечиваемому объектами HwndSource и HwndHost и дескрипторами окна, имеются также следующие ограничения для нескольких интерфейсов Пользовательские интерфейсы надстройки, которые отображаются из ведущих приложений.

  • Несколько пользовательских интерфейсов Пользовательские интерфейсы надстройки, отображаемых из ведущего приложения, не используют ограничения поведения ведущего приложения.

  • Концепция airspace в сценариях взаимодействия также применяется к надстройкам (см. Взаимодействие с WPF. Общие сведения об областях "airspace" и областях окна).

  • Службы Пользовательский интерфейс ведущего приложения, такие как наследование ресурса, привязка данных и команды, недоступны автоматически для Пользовательские интерфейсы надстроек. Чтобы предоставить эти службы надстройке, необходимо обновить конвейер.

  • Пользовательский интерфейс Пользовательский интерфейс надстройки не может быть повернут, масштабирован, наклонен или преобразован иным способом (см. Общие сведения о классах Transform).

  • Содержимое внутри Пользовательские интерфейсы надстройки, которое отображено посредством рисования из пространства имен System.Drawing, может включать альфа-смешение. Однако Пользовательский интерфейс надстройки и Пользовательский интерфейс ведущего приложения которое его содержит, должны быть на 100% непрозрачны; другими словами, свойство Opacity обоих пользовательских интерфейсов должно иметь значение 1.

  • Если свойство AllowsTransparency окна в ведущем приложении, которое содержит Пользовательский интерфейс надстройки, имеет значение true, надстройка будет невидимой. Это верно даже в том случае, если пользовательский интерфейс Пользовательский интерфейс надстройки на 100% непрозрачен (то есть свойство Opacity имеет значение 1).

  • Пользовательский интерфейс Пользовательский интерфейс надстройки должен отображаться в верхней части других элементов WPF в том же окне верхнего уровня.

  • Никакая часть пользовательского интерфейса Пользовательский интерфейс надстройки не может быть отображена с посредством объекта VisualBrush. Вместо этого, надстройка может сделать снимок сгенерированного Пользовательский интерфейс, чтобы создать точечный рисунок, который может быть передан в ведущее приложение с помощью методов, определенных контрактом.

  • Файлы мультимедиа невозможно воспроизвести из объекта MediaElement в Пользовательский интерфейс надстройки.

  • События мыши, созданные для Пользовательский интерфейс надстройки, не могут быть получены или вызваны ведущим приложением, и свойство IsMouseOver для пользовательского интерфейса Пользовательский интерфейс ведущего приложения имеет значение false.

  • При перемещении фокуса между элементами управления в пользовательском интерфейсе Пользовательский интерфейс надстройки событий GotFocus и LostFocus не могут быть получены или вызваны ведущим приложением.

  • Часть ведущего приложения, которая содержит Пользовательский интерфейс надстройки, будет пустым пространством при печати.

  • Все диспетчеры (см. Dispatcher), созданные пользовательским интерфейсом Пользовательский интерфейс надстройки, должны быть вручную отключены, перед тем как надстройка владельца будет отправлена, если ведущее приложение продолжает выполняться. Контракт может реализовать методы, позволяющие ведущему приложению оповещать надстройку, перед тем как надстройка будет отправлена, тем самым позволяя Пользовательский интерфейс надстройки завершить работу своих диспетчеров.

  • Если пользовательский интерфейс Пользовательский интерфейс надстройки является объектом InkCanvas или содержит объект InkCanvas, невозможно отправить надстройку.

Оптимизация производительности

По умолчанию, при использовании нескольких доменов приложений, все сборки .NET Framework, необходимые для каждого приложения, загружаются в домен приложения. В результате, время, необходимое для создания новых доменов приложений и запуска в них приложений, может влиять на производительность. Однако компонент .NET Framework предоставляет способ сократить время запуска посредством инструктирования приложений для совместного использования сборок доменами приложений, если они уже загружены. Это можно выполнить с помощью атрибута LoaderOptimizationAttribute, который должен быть применен к методу точки входа (Main). В этом случае, необходимо использовать только код для реализации определения приложения (см. Общие сведения об управлении приложением).

Следующие ранее описанные примеры демонстрируют использование атрибута LoaderOptimizationAttribute:

См. также

Задачи

Пример использования надстроек, возвращающих пользовательский интерфейс

Пример использования надстроек в качестве элементов пользовательского интерфейса

Пример надстройки с несколькими пользовательскими интерфейсами

Основные понятия

Обзор надстройки

Общие сведения о доменах приложений

Ссылки

LoaderOptimizationAttribute

Другие ресурсы

.NET Framework Remoting Overview

Making Objects Remotable