Практическое руководство. Поддержка COM-взаимодействия путем отображения каждой формы Windows Forms в отдельном потоке
Проблемы COM-взаимодействия можно устранить путем отображения формы в цикле обработки сообщений .NET Framework , который можно создать с помощью метода Application.Run .
Чтобы исправить работу формы Windows Forms из клиентского приложения COM, необходимо запустить форму в цикле обработки сообщений Windows Forms. Для этого воспользуйтесь одним из перечисленных ниже подходов.
Используйте метод Form.ShowDialog для отображения Windows Form. Дополнительные сведения см. в разделе Как Поддержка COM-взаимодействия путем отображения формы Windows Forms с помощью метода ShowDialog.
Отображайте каждую форму Windows Forms в отдельном потоке.
Имеется широкая поддержка этой возможности в Visual Studio.
Также см. в разделе Пошаговое руководство: Поддержка COM-взаимодействия путем отображения каждой формы Windows Forms в отдельном потоке.
Пример
В следующем примере кода демонстрируется отображение формы в отдельном потоке и вызов метода Application.Run для запуска загрузки сообщений Windows Forms в этом потоке. Чтобы использовать этот подход, необходимо выполнять маршалинг всех обращений к форме из приложения неуправляемого кода с помощью метода Invoke .
Этот подход требует, что каждый экземпляр формы выполнялся в своем собственном потоке с использованием собственного цикла обработки сообщений. В каждом потоке не может быть более одного цикла обработки сообщений. Таким образом, изменить цикл обработки сообщений клиентского приложения нельзя. Однако можно изменить компонент .NET Framework для запуска нового потока, использующего собственный цикл обработки сообщений.
Компиляция кода
- Скомпилируйте типы
COMForm
,Form1
иFormManager
в сборку и назовите ееCOMWinform.dll
. Зарегистрируйте сборку для COM-взаимодействия с помощью одного из методов, описанных в разделе Packaging an Assembly for COM. Теперь можно использовать сборку и соответствующий ей файл библиотеки типов (с расширением TLB) в неуправляемых приложениях. Например, можно использовать библиотеку типов как ссылку в проекте исполняемого файла Visual Basic 6.0.
См. также
- Предоставление COM-клиентам доступа к компонентам .NET Framework
- Упаковка сборки для модели COM
- Регистрация сборок в COM
- Практическое руководство. Обеспечение поддержки COM-взаимодействия путем отображения формы Windows Forms с помощью метода ShowDialog
- Общие сведения о Windows Forms и неуправляемых приложениях